package com.plian.system.service.fr.indicatorsvalue;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.plian.Tools.*;
import com.plian.Tools.pagedata.PageData;
import com.plian.system.bean.fr.IndustryDebtExcelBean;
import com.plian.system.config.RedisUtils;
import com.plian.system.config.exception.MyRuntimeException;
import com.plian.system.dao.bt.baseinfo.BaseInfoDao;
import com.plian.system.dao.fr.financeindicators.FinanceIndicatorsDao;
import com.plian.system.dao.fr.indicatorsstdvalue.IndicatorsStdvalueDao;
import com.plian.system.dao.fr.indicatorsvalue.IndicatorsValueDao;
import com.plian.system.dao.sys.orgzation.OrgzationDao;
import com.plian.system.entity.fr.enterprise.Enterprise;
import com.plian.system.entity.fr.indicators.GraphicOrgRelation;
import com.plian.system.entity.fr.indicators.IndicatorsValue;
import com.plian.system.enumeratea.CheckName;
import com.plian.system.mapper.fr.indicators.IndicatorsValueMapper;
import com.plian.system.model.CommonCode;
import com.plian.system.model.ListResult;
import com.plian.system.model.ObjResult;
import com.plian.system.service.fr.bulletin.INewBulletinService;
import com.plian.system.service.fr.enterprise.IEnterpriseService;
import com.plian.system.service.im.IBaseInvestmentExecutionService;
import com.plian.system.service.sys.orgzation.IOrgService;
import com.plian.system.service.sys.orgzation.OrgzationService;
import com.plian.system.vo.fr.indicatorsValue.IndicatorsValueMonthVO;
import com.plian.system.vo.fr.indicatorsValue.ReturnEquityDetailVO;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;

@Service
@Transactional
public class IndicatorsValueService extends ServiceImpl<IndicatorsValueMapper, IndicatorsValue> {
    @Autowired
    IndicatorsValueDao indicatorsValueDao;
    @Autowired
    IndicatorsStdvalueDao indicatorsStdvalueDao;
    @Autowired
    FinanceIndicatorsDao financeIndicatorsDao;
    @Autowired
    IEnterpriseService enterpriseService;
    @Autowired
    BaseInfoDao baseInfoDao;
    @Autowired
    OrgzationDao orgzationDao;
    @Autowired
    OrgzationService orgzationService;
    @Autowired
    IBaseInvestmentExecutionService baseInvestmentExecutionService;
    @Autowired
    Environment environment;
    @Autowired
    RedisUtils redisUtils;
    @Autowired
    IGraphicOrgRelationService graphicOrgRelationService;
    @Autowired
    INewBulletinService newBulletinService;
    @Autowired
    IOrgService orgService;

    private static final Logger LOGGER = LoggerFactory.getLogger(IndicatorsValueService.class);

    private static Map<String, List<String>> subtractChildMap = new HashMap<>();

    /**
     * 5个 指标图表
     *
     * @return
     */
    public ObjResult graphicReport(PageData pad) {
        String[] codes = {
                "K22",
                "K30",
                "K36",
                "KLJ1",
                "KLJ19",
        };

        PageData p = new PageData();
        p.put("list", getList(codes, pad, 1));
        ObjResult objResult = new ObjResult(CommonCode.SUCCESS);
        objResult.setPageData(p);
        return objResult;
    }

    /**
     * 单个指标图表
     * @param pad
     * @return
     */
    public ObjResult graphicReportByCode(PageData pad){
        String queryCode = pad.getString("code");
        if (StringUtil.isBlank(queryCode)){
            throw new MyRuntimeException("code为null");
        }
        String[] codes = new String[]{queryCode};
        List<PageData> list = getList(codes, pad, 2);
        PageData p = new PageData();
        p.put("list", list);
        ObjResult objResult = new ObjResult(CommonCode.SUCCESS);
        objResult.setPageData(p);
        return objResult;
    }

    /**
     * 获取统计数据
     * @param codes
     * @param pad
     * @param type
     * @return
     */
    private List<PageData> getList(String[] codes, PageData pad, int type){
        String date = pad.getString("date");
        String[] datas = new String[2];
        //亿元标签
        boolean millionFlag = "2".equals(pad.getString("unitType"));
        if (Tools.notEmpty(date)) {
            datas = date.split("-");
        } else {
            ObjResult objResult = new ObjResult(CommonCode.ERRORPARAMETER);
            throw new MyRuntimeException(objResult);
        }
        try {
            //得到所有集团
            List<PageData> Units = new ArrayList<>();
            if (orgService.getDTFlag(date)){
                Units = orgzationDao.findGZWUnitsFilterDT();
            }else {
                Units = orgzationDao.findGZWUnits();
            }
            List<String> l1 = new ArrayList<>();
            for (PageData unit : Units) {
                l1.add(unit.getString("id"));
            }

            boolean mergeFlag = true;
            if(type == 2){
                String orgId = pad.getString("orgId");
                if (StringUtil.isNotBlank(orgId)){
                    PageData org = orgzationDao.findbyid(orgId);
                    if (org != null && !"0".equals(org.getString("parentId"))) {
                        mergeFlag = false;
                        l1.clear();
                        l1.add(orgId);
                    }
                }

            }

            if(type == 3 || type == 4){
                List<String> orgIds = (List<String>)pad.get("orgIds");
                if (CollectionUtil.isNotEmpty(orgIds)){
                    l1.clear();
                    l1.addAll(orgIds);
                }
            }

            String[] codes1 = {
                    "K22",
                    "K30",
                    "K36",
                    "KLJ1",
                    "KLJ19",
            };
//            String[] codes2 = {
//                    "K1",
//                    "K19",
//            };

            int year = Integer.valueOf(datas[0]);
            PageData pd = new PageData();
            pd.put("orgIds", l1);
            pd.put("month", datas[1]);
            pd.put("year", datas[0]);
            pd.put("codes", codes1);
            List<PageData> list1 = indicatorsValueDao.findCode(pd);

//            pd.put("codes", codes2);
//            List<PageData> list2 = indicatorsValueDao.findCode1(pd);
//            list1.addAll(list2);

            List<PageData> list3 = new ArrayList<>();
            if (type == 2 || type == 3 || type == 4){
                pd.put("codes", codes);
                list3 = indicatorsValueDao.findCode2(pd);
            }

            Map<String, List<String>> map = new HashMap<>();
            Map<String, String> colors = getCompanyColorMap(Units);
            List[] lists = new ArrayList[codes.length];
            //递归拿到集合下全部单位id
            if (type != 4){
                for (PageData unit : Units) {
                    String unitId = unit.getString("id");
                    Enterprise en = enterpriseService.findByOrg(unitId);
                    String name = unit.getString("name");
                    String checkName = unit.getString("name");
                    if (en!=null){
                        checkName = "".equals(en.getUnitCheck())? unit.getString("name") : en.getUnitCheck();
                    }
                    for (int i = 0; i < codes.length; i++) {
                        String code = codes[i];
                        PageData p1 = new PageData();
                        BigDecimal v=new BigDecimal("0");
                        p1.put("orgId", unit.getString("id"));
                        p1.put("name", checkName);
                        p1.put("color", colors.get(unit.getString("id")));
                        for (PageData pageData : list1) {
                            if(unitId.equals(pageData.getString("orgId"))){
                                if (code.equals(pageData.getString("code"))) {
                                    String value = pageData.getString("fvalue");
                                    if (Tools.notEmpty(value)) {
                                        BigDecimal b = new BigDecimal(value);
                                        v=v.add(b);
                                    }
                                }
                            }
                        }
                        if(CollectionUtil.isNotEmpty(list3)){
                            for (PageData pageData : list3){
                                if(unitId.equals(pageData.getString("orgId"))){
                                    String value = pageData.getString("fvalue");
                                    List<String> values = new ArrayList<>();
                                    if(map.containsKey(unitId + "-" + name)){
                                        values = map.get(unitId + "-" + name);
                                    }else {
                                        map.put(unitId + "-" + name, values);
                                    }
//                                if (CollectionUtil.isNotEmpty(values) && ("K1".equals(code) || "K19".equals(code))){
//                                    values.add(BigDecimalUtil.add(new BigDecimal(value), new BigDecimal(values.get(values.size() - 1))).toPlainString());
//                                }else {
                                    values.add(value);
//                                }

                                }
                            }
                        }
                        if(v.floatValue()!=0){
//                        v.setScale(6, BigDecimal.ROUND_UP);
                            p1.put("value", v.toPlainString());
                            if (lists[i] == null) {
                                lists[i] = new ArrayList();
                                lists[i].add(p1);
                            } else {
                                lists[i].add(p1);
                            }
                        }
                    }
                }
            }else {
                for (String orgId : l1){
                    PageData unit = orgzationDao.findbyid(orgId);
                    String unitId = unit.getString("id");
                    Enterprise en = enterpriseService.findByOrg(unitId);
                    String name = unit.getString("name");
                    String checkName = unit.getString("name");
                    if (en!=null){
                        checkName = "".equals(en.getUnitCheck())? unit.getString("name") : en.getUnitCheck();
                    }
                    for (int i = 0; i < codes.length; i++) {
                        String code = codes[i];
                        PageData p1 = new PageData();
                        BigDecimal v=new BigDecimal("0");
                        p1.put("orgId", unit.getString("id"));
                        p1.put("name", checkName);
//                        p1.put("color", colors.get(unit.getString("id")));
                        for (PageData pageData : list1) {
                            if(unitId.equals(pageData.getString("orgId"))){
                                if (code.equals(pageData.getString("code"))) {
                                    String value = pageData.getString("fvalue");
                                    if (Tools.notEmpty(value)) {
                                        BigDecimal b = new BigDecimal(value);
                                        v=v.add(b);
                                    }
                                }
                            }
                        }
                        if(CollectionUtil.isNotEmpty(list3)){
                            for (PageData pageData : list3){
                                if(unitId.equals(pageData.getString("orgId"))){
                                    String value = pageData.getString("fvalue");
                                    List<String> values = new ArrayList<>();
                                    if(map.containsKey(unitId + "-" + name)){
                                        values = map.get(unitId + "-" + name);
                                    }else {
                                        map.put(unitId + "-" + name, values);
                                    }
//                                if (CollectionUtil.isNotEmpty(values) && ("K1".equals(code) || "K19".equals(code))){
//                                    values.add(BigDecimalUtil.add(new BigDecimal(value), new BigDecimal(values.get(values.size() - 1))).toPlainString());
//                                }else {
                                    values.add(value);
//                                }

                                }
                            }
                        }
                        if(v.floatValue()!=0){
//                        v.setScale(6, BigDecimal.ROUND_UP);
                            p1.put("value", v.toPlainString());
                            if (lists[i] == null) {
                                lists[i] = new ArrayList();
                                lists[i].add(p1);
                            } else {
                                lists[i].add(p1);
                            }
                        }
                    }
                }
            }


            List<PageData> l = new ArrayList<>();
            if (type == 3 || type == 4){
                subtractChildMap = map;
            }else {
                valueSet(mergeFlag, lists, map, Units, codes, pad, type, year);
            }

            for (int i = 0; i < lists.length; i++) {
                List<PageData> list = lists[i];
                PageData p2 = new PageData();
                BigDecimal b = new BigDecimal("0");
                if(list!=null){
                    list.sort((v1, v2) ->
                         BigDecimalUtil.toBigdecimal(v2.getString("value"))
                                .compareTo(BigDecimalUtil.toBigdecimal(v1.getString("value")))
                    );

                    for (PageData pageData : list) {
                        String name = pageData.getString("name");
                        if (StringUtil.isNotBlank(CheckName.getAbbreviationName(name))){
                            pageData.put("name", CheckName.getAbbreviationName(name));
                        }
                        b = b.add(new BigDecimal(pageData.getString("value")));
                        if (millionFlag && type != 3 && type != 4){
                            pageData.put("value", BigDecimalUtil.divide(new BigDecimal(pageData.getString("value")),
                                    new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP).toPlainString());
                        }
                    }

                    p2.put("list", list);
                    if (millionFlag && type != 3){
                        b = BigDecimalUtil.divide(b, new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP);
                    }
                    p2.put("sum", b.toPlainString());
                    p2.put("code", codes[i]);
                    l.add(p2);
                }
            }

            if (type == 2 && CollectionUtil.isNotEmpty(map)){
                List<String> total = new ArrayList<>();
                List<IndicatorsValueMonthVO> list = new ArrayList<>();
                for (PageData unit : Units) {
                    String unitId = unit.getString("id");
                    String name = unit.getString("name");
                    if (map.containsKey(unitId + "-" + name)){
                        List<String> v = map.get(unitId + "-" + name);
                        if (CollectionUtil.isEmpty(total)) {
                            total.addAll(v);
                        } else {
                            for (int i = 0; i < v.size(); i++){
                                total.set(i, BigDecimalUtil.add(new BigDecimal(total.get(i)), new BigDecimal(v.get(i))).toPlainString());
                            }
                        }

                        list.add(IndicatorsValueMonthVO.builder().orgId(unitId).orgName(name).values(v).build());
                    }
                }
                PageData p3 = new PageData();
                list.sort((vo1, vo2) -> {
                    List<String> vo1List = vo1.getValues();
                    List<String> vo2List = vo2.getValues();
                    BigDecimal vo1MonthValue = new BigDecimal(0);
                    BigDecimal vo2MonthValue = new BigDecimal(0);
                    if(CollectionUtil.isNotEmpty(vo1List)){
                        vo1MonthValue = BigDecimalUtil.toBigdecimal(vo1List.get(vo1List.size() - 1));
                    }

                    if(CollectionUtil.isNotEmpty(vo2List)){
                        vo2MonthValue = BigDecimalUtil.toBigdecimal(vo2List.get(vo2List.size() - 1));
                    }
                    return vo2MonthValue.compareTo(vo1MonthValue);
                });
                list.add(IndicatorsValueMonthVO.builder().orgName("合计").values(total).build());
                if (millionFlag){
                    for (IndicatorsValueMonthVO vo : list){
                        List<String> tempValues = new ArrayList<>();
                        for (String value : vo.getValues()){
                            tempValues.add(BigDecimalUtil.divide(new BigDecimal(value),
                                    new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP).toPlainString());
                        }
                        vo.setValues(tempValues);
                    }
                }
                p3.put("excelList", list);
                l.add(p3);
            }

           return l;

        } catch (Exception e) {
            LOGGER.error(ExceptionUtils.getStackTrace(e));
            throw new MyRuntimeException();
        }
    }


    private void valueSet(boolean mergeFlag, List[] lists, Map<String, List<String>> map, List<PageData> Units,
                          String[] codes, PageData pad, int type, int year){
        Map<String, List<GraphicOrgRelation>> mergeMap = graphicOrgRelationService.getMergeMap(year);
        for (int i = 0; i < lists.length; i++){
            List<PageData> list = lists[i];
            if (CollectionUtil.isNotEmpty(list)){
                if (year > 2019){
                    for (PageData pageData : list) {
                        List<String> children = graphicOrgRelationService.getSubtract(pageData.getString("orgId"), year);
                        if (CollectionUtil.isNotEmpty(children)){
                            pad.put("orgIds", children);
                            List<PageData> list1 = getList(codes, pad, 3);
                            if (CollectionUtil.isNotEmpty(list1)){
                                List<PageData> childrenList = (List<PageData>)list1.get(i).get("list");
                                if (CollectionUtil.isNotEmpty(childrenList)){
                                    for (PageData child : childrenList) {
                                        if(children.contains(child.getString("orgId"))){
                                            pageData.put("value", BigDecimalUtil.subtract(new BigDecimal(pageData.getString("value")),
                                                    new BigDecimal(child.getString("value"))).toPlainString());
                                        }
                                    }
                                }
                            }

                        }
                        List<String> addChildren = graphicOrgRelationService.getAdd(pageData.getString("orgId"), year);
                        if (CollectionUtil.isNotEmpty(addChildren)){
                            pad.put("orgIds", addChildren);
                            List<PageData> list1 = getList(codes, pad, 4);
                            if (CollectionUtil.isNotEmpty(list1)){
                                List<PageData> childrenList = (List<PageData>)list1.get(i).get("list");
                                if (CollectionUtil.isNotEmpty(childrenList)){
                                    for (PageData child : childrenList) {
                                        if(addChildren.contains(child.getString("orgId"))){
                                            pageData.put("value", BigDecimalUtil.add(new BigDecimal(pageData.getString("value")),
                                                    new BigDecimal(child.getString("value"))).toPlainString());
                                        }
                                    }
                                }
                            }

                        }
                    }
                }

                if (mergeFlag && CollectionUtil.isNotEmpty(mergeMap)){
                    mergeMap.forEach((k,v) -> {
                        PageData p = new PageData();
                        p.put("orgId", k.split("-")[0]);
                        p.put("name", k.split("-")[1]);
                        p.put("value", 0);

                        List<String> childIds = v.stream().map(GraphicOrgRelation::getChildId).collect(Collectors.toList());
                        Iterator<PageData> iterator = list.iterator();

                        while(iterator.hasNext()){
                            PageData child = iterator.next();
                            if(childIds.contains(child.getString("orgId"))){
                                if (StringUtil.isBlank(p.getString("color"))){
                                    p.put("color", child.getString("color"));
                                }
                                p.put("value", BigDecimalUtil.add(new BigDecimal(p.getString("value")),
                                        new BigDecimal(child.getString("value"))).toPlainString());
                                iterator.remove();
                            }
                        }
                        list.add(p);
                    });
                }
            }
        }

        if (type == 2){
            if (year > 2019){
                map.forEach((k, v) -> {
                    String[] idName = k.split("-");
                    List<String> children = graphicOrgRelationService.getSubtract(idName[0], year);
                    if (CollectionUtil.isNotEmpty(children)){
                        pad.put("orgIds", children);
                        getList(codes, pad, 3);
                        subtractChildMap.forEach((childK, childV) -> {
                            String[] childIdName = childK.split("-");
                            if(children.contains(childIdName[0])){
                                for (int i = 0; i < v.size(); i++){
                                    v.set(i, BigDecimalUtil.subtract(new BigDecimal(v.get(i)), new BigDecimal(childV.get(i))).toPlainString());
                                }
                            }
                        });
                    }

                    List<String> addChildren = graphicOrgRelationService.getAdd(idName[0], year);
                    if (CollectionUtil.isNotEmpty(addChildren)){
                        pad.put("orgIds", addChildren);
                        getList(codes, pad, 4);
                        subtractChildMap.forEach((childK, childV) -> {
                            String[] childIdName = childK.split("-");
                            if(addChildren.contains(childIdName[0])){
                                for (int i = 0; i < v.size(); i++){
                                    v.set(i, BigDecimalUtil.add(new BigDecimal(v.get(i)), new BigDecimal(childV.get(i))).toPlainString());
                                }
                            }
                        });
                    }
                });
            }

            if (mergeFlag && CollectionUtil.isNotEmpty(mergeMap)){
                mergeMap.forEach((k,v) -> {
                    List<String> childIds = v.stream().map(GraphicOrgRelation::getChildId).collect(Collectors.toList());
                    Iterator<Map.Entry<String, List<String>>> it = map.entrySet().iterator();
                    List<String> valueList = new ArrayList<>();
                    while (it.hasNext()) {
                        Map.Entry<String, List<String>> entry = it.next();
                        String[] idName = entry.getKey().split("-");
                        if (childIds.contains(idName[0])) {
                            List<String> childValues = entry.getValue();
                            if (CollectionUtil.isEmpty(valueList)){
                                valueList.addAll(childValues);
                            }else {
                                for (int i = 0; i < valueList.size(); i++){
                                    valueList.set(i, BigDecimalUtil.add(new BigDecimal(valueList.get(i)), new BigDecimal(childValues.get(i))).toPlainString());
                                }
                            }
                            it.remove();
                        }
                    }
                    map.put(k, valueList);
                    for (int i = 0; i<Units.size(); i++) {
                        PageData unit = Units.get(i);
                        String unitId = unit.getString("id");
                        if (childIds.contains(unitId)){
                            Units.remove(i);
                        }
                    }
                    PageData newUnit = new PageData();
                    newUnit.put("id", k.split("-")[0]);
                    newUnit.put("name", k.split("-")[1]);
                    Units.add(newUnit);

                });
            }
        }

    }
    /**
     * 给每个集团赋予颜色
     * @param units
     * @return
     */
    private Map<String, String> getCompanyColorMap(List<PageData> units){
        Map<String, String> colorMap = new HashMap<>();
        List<String> colors = new ArrayList<>();
        colors.add("#842C3C");
        colors.add("#B82C35");
        colors.add("#EA2627");
        colors.add("#ED8689");
        colors.add("#008B8B");
        colors.add("#EF9D6E");
        colors.add("#EED56E");
        colors.add("#59DBDB");
        colors.add("#01A2CE");
        colors.add("#E9967A");
        colors.add("#43DAA3");
        colors.add("#04A68F");
        colors.add("#7792AF");
        colors.add("#B6C4D1");
        colors.add("#FF7F50");
        colors.add("#6495ED");
        colors.add("#FFC0CB");
        colors.add("#FFD700");
        colors.add("#FFA500");
        colors.add("#FFDEAD");

        if (CollectionUtil.isNotEmpty(units)){
            for (int i = 0; i<units.size(); i++){
                PageData unit = units.get(i);
                if (i < colors.size()){
                    colorMap.put(unit.getString("id"), colors.get(i));
                }else {
                    colorMap.put(unit.getString("id"), "");
                }
            }

        }
        return colorMap;
    }

    /*
     *快报指标趋势
     * */
    public ListResult graphicDetailList(PageData pd) {
        try {
            if (pd.getString("orgId").contains("united")) {
                pd.put("orgId", pd.getString("orgId").substring(0, pd.getString("orgId").length() - 6));
                pd.put("united", 1);
            }
            List<PageData> orgAll = orgzationDao.list(null);
            List<String> l = new ArrayList<>();
            List<PageData> list = new ArrayList<>();
            List<String> childIds = graphicOrgRelationService.getMergeChildList(pd.getString("orgId"));
            if(CollectionUtil.isNotEmpty(childIds)){
                for(String childId : childIds){
                    List<PageData> childIdList = getOrgIds(orgAll, childId);
                    if(CollectionUtil.isNotEmpty(childIdList)){
                        list.addAll(childIdList);
                    }
                }
            }else {
                List<PageData> childIdList = getOrgIds(orgAll, pd.getString("orgId"));
                if(CollectionUtil.isNotEmpty(childIdList)){
                    list.addAll(childIdList);
                }
            }
            for (PageData pageData : list) {
                l.add(pageData.getString("id"));
            }
            pd.put("orgIds", l);
            pd.put("month", pd.getString("month"));
            pd.put("year", pd.getString("year"));
            List<PageData> datelist = indicatorsValueDao.findListByCode(pd);
            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
            Result.setList(datelist);
            return Result;
        } catch (Exception e) {
            LOGGER.error(ExceptionUtils.getStackTrace(e));
            return new ListResult<>(CommonCode.ERROR);
        }
    }

    /**
     * 指标明细
     *
     * @return
     */
    public ObjResult graphicDetailed(PageData pd) {
        try {
            PageData p2 = new PageData();
            int month = 12;
            pd.put("month", month);
            p2.put("list1", detailed(pd));
            pd.put("year", pd.getInteger("year") - 1);
            p2.put("list2", detailed(pd));
            ObjResult objResult = new ObjResult(CommonCode.SUCCESS);
            objResult.setPageData(p2);
            return objResult;
        } catch (Exception e) {
            LOGGER.error(ExceptionUtils.getStackTrace(e));
            throw new MyRuntimeException();
        }
    }

//    /** TODO DEL
//     * 指标图表
//     *
//     * @return
//     */
//    public ListResult debtReport(PageData pd) {
//        try {
//            String vaues = "";
//            String selectVal = "";
//            BigDecimal standardvalue = null;
//            BigDecimal warningvalue = null;
//            String[] codeList = {"G1", "G2", "G3", "G4"};
//
////            解析时间
//            String year = pd.getString("reportTime").substring(0, 4);
//            String month = pd.getString("reportTime").substring(5, 7);
//            pd.put("year", year);
//            pd.put("month", month);
//            List<String> orgIds = new ArrayList<>();
//            List<PageData> orgList = orgzationDao.findchildbyid(pd.getString("orgId"));
//            for (String code : codeList) {
////                求前三年的平均值
//                selectVal += "(LAST_" + code + "+LAST_TWO_" + code + "+LAST_THREE_" + code + ")/3 AS AVG_" + code + ",";
////                拼接查询前三年同期数值和本年本期数
//                vaues += "MAX(CASE a.`code`  WHEN '" + code + "' THEN a.fvalue  ELSE null END)" + code +
//                        ",(SELECT IFNULL(val.fvalue,0) FROM " +
//                        "fr_indicators_value val,fr_finance_indicators indic " +
//                        "WHERE val.fyear = (a.fyear-1) AND val.org_id = a.orgId  AND val.is_group = '0' AND val.indicators_id = indic.id AND indic.`code`='" +
//                        code + "' AND val.fmonth=a.fmonth) LAST_" + code +
//                        ",(SELECT IFNULL(val.fvalue,0) FROM " +
//                        "fr_indicators_value val,fr_finance_indicators indic " +
//                        "WHERE val.fyear = (a.fyear-2) AND val.org_id = a.orgId  AND val.is_group = '0' AND val.indicators_id = indic.id AND indic.`code`='" +
//                        code + "' AND val.fmonth=a.fmonth) LAST_TWO_" + code +
//                        ",(SELECT IFNULL(val.fvalue,0) FROM " +
//                        "fr_indicators_value val,fr_finance_indicators indic " +
//                        "WHERE val.fyear = (a.fyear-3) AND val.org_id = a.orgId  AND val.is_group = '0' AND val.indicators_id = indic.id AND indic.`code`='" +
//                        code + "' AND val.fmonth=a.fmonth) LAST_THREE_" + code + ",";
//            }
//            for (PageData org : orgList) {
//                orgIds.add(org.getString("id"));
//            }
//            pd.put("vaues", vaues);
//            pd.put("orgIds", orgIds);
//            pd.put("codes", codeList);
//            pd.put("selectVal", selectVal);
//            List<PageData> list = indicatorsValueDao.listDebtRiskWarning(pd);
//            for (PageData p : list) {
//                for (String code : codeList) {
//                    BigDecimal value = new BigDecimal(p.getString(code));
//                    PageData indecator = financeIndicatorsDao.findByCode(code);
//                    PageData p1 = new PageData();
//                    p1.put("code", code);
//                    p1.put("year", p.getString("fyear"));
//                    p1.put("orgId", p.getString("orgId"));
//                    List<PageData> fstavalueList = indicatorsStdvalueDao.findbyOrgAndYear(p1);
//                    if (fstavalueList != null && fstavalueList.size() > 0) {
//                        for (PageData pageData : fstavalueList) {
//                            if (Tools.notEmpty(pageData.getString("valueName"))) {
//                                if ("较低值".equals(pageData.getString("valueName"))) {
//                                    standardvalue = new BigDecimal(pageData.getString("standardValues"));
//                                } else if ("较差值".equals(pageData.getString("valueName"))) {
//                                    warningvalue = new BigDecimal(pageData.getString("standardValues"));
//                                } else {
//                                    continue;
//                                }
//                            }
//
//                        }
//                        if (Tools.isEmpty(standardvalue.toString())) {
//                            standardvalue = new BigDecimal(0);
//                        }
//                        if (Tools.isEmpty(warningvalue.toString())) {
//                            warningvalue = new BigDecimal(0);
//                        }
//                    } else {
//                        standardvalue = new BigDecimal(0);
//                        warningvalue = new BigDecimal(0);
//                    }
//                    switch (indecator.getString("greatFloating")) {
//                        case "0":
//                            if (value.compareTo(standardvalue) > -1) {
//                                p.put("COLOR_" + code, 0);
//                            } else if (value.compareTo(standardvalue) == -1 && value.compareTo(warningvalue) == 1) {
//                                p.put("COLOR_" + code, 1);
//                            } else if (value.compareTo(warningvalue) < 1) {
//                                p.put("COLOR_" + code, 2);
//                            }
//                            break;
//                        case "1":
//                            if (value.compareTo(standardvalue) < 1) {
//                                p.put("COLOR_" + code, 0);
//                            } else if (value.compareTo(standardvalue) == 1 && value.compareTo(warningvalue) == -1) {
//                                p.put("COLOR_" + code, 1);
//                            } else if (value.compareTo(warningvalue) > -1) {
//                                p.put("COLOR_" + code, 2);
//                            }
//                            break;
//                        default:
//                            break;
//                    }
//                    p.put("STANDARDVALUE_" + code, standardvalue);
//                    p.put("WARNINGVALUE_" + code, warningvalue);
//                }
//            }
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

    /**
     * 指标图表
     *
     * @return
     */
    public ListResult getIndustryDebt(PageData pd) {
        try {
            TreeUtli treeUtli = new TreeUtli();
            String[] codeList = {"G1", "G2", "G3", "G4"};
//            解析时间
            String reportTime = pd.getString("reportTime");
            String year = reportTime.substring(0, 4);
            String month = reportTime.substring(5, 7);
            pd.put("year", year);
            pd.put("month", month);
            pd.put("list", codeList);
            String orgId = pd.getString("orgId");
            boolean flag = false;
            if(StringUtil.isNotBlank(orgId)){
                PageData org = orgzationDao.findbyid(orgId);
                pd.remove("orgId");
                if (!"0".equals(org.getString("parentId"))) {
                    flag = true;
                }
            }

            List<PageData> list = indicatorsValueDao.getIndustryDebt(pd);
            List<Tree> dateList = new ArrayList<>();
            for (PageData p : list) {
                Tree tree = new Tree();
                tree.setId(p.getString("orgId"));
                tree.setParentId(p.getString("pId"));
                if (Tools.notEmpty(p.getString("industry"))) {
                    p.put("industryName", baseInfoDao.findbycode(p.getString("industry")).getString("name"));
                }
                tree.setPageData(p);
                dateList.add(tree);
            }
            List<Tree> allTree = treeUtli.getTree(dateList);
            dateList = allTree.get(0).getChildren().get(0).getChildren().get(0).getChildren();
            dateList.addAll(allTree.get(0).getChildren().get(0).getChildren().get(1).getChildren());
            for (Tree tree : dateList) {
                Tree changeTree = new Tree();
                changeTree.setId(tree.getId());
                changeTree.setPageData(tree.getPageData());
                pd.put("orgId", tree.getId());
                List<PageData> group = indicatorsValueDao.getIndustryDebt(pd);
                if (group.size() > 0) {
                    tree.setPageData(group.get(0));
                    if (Tools.notEmpty(group.get(0).getString("industry"))) {
                        group.get(0).put("industryName", baseInfoDao.findbycode(group.get(0).getString("industry")).getString("name"));
                        group.get(0).put("isGroup", 2);
                    }
                }
                if (tree.getChildren() != null) {
                    changeTree.getPageData().put("orgName", changeTree.getPageData().getString("orgName") + "(本级)");
                    tree.getChildren().add(0, changeTree);
                }
            }
            if (flag){
                dateList = dateList.stream().filter(tree -> orgId.equals(tree.getId())).collect(Collectors.toList());
            }

            if (CollectionUtil.isNotEmpty(dateList)){
                Tree totalTree = new Tree();
                totalTree.setName("合计");
                PageData totalPD = new PageData();
                totalPD.put("orgName", "合计");

                BigDecimal totalBookAssets = new BigDecimal(0);
                BigDecimal totalBookLiabilities = new BigDecimal(0);

                BigDecimal adjustedTotalAssets = new BigDecimal(0);
                BigDecimal adjustedTotalLiabilities = new BigDecimal(0);

                List<String> subtractIds = new ArrayList<>();
                List<String> addIds = new ArrayList<>();
                if (!flag){
                    subtractIds = graphicOrgRelationService.getSubtractChildList(reportTime);
                    addIds = graphicOrgRelationService.getAddChildList(reportTime);
                }

                for(Tree tree : dateList){
                    PageData treePD = tree.getPageData();
                    String subtractOrgId = treePD.getString("orgId");
                    if (CollectionUtil.isEmpty(subtractIds) || !subtractIds.contains(subtractOrgId)){
                        totalBookAssets = BigDecimalUtil.add(totalBookAssets, BigDecimalUtil.toBigdecimal(treePD.getString("totalBookAssets")));
                        totalBookLiabilities = BigDecimalUtil.add(totalBookLiabilities, BigDecimalUtil.toBigdecimal(treePD.getString("totalBookLiabilities")));

                        adjustedTotalAssets = BigDecimalUtil.add(adjustedTotalAssets, BigDecimalUtil.toBigdecimal(treePD.getString("adjustedTotalAssets")));
                        adjustedTotalLiabilities = BigDecimalUtil.add(adjustedTotalLiabilities, BigDecimalUtil.toBigdecimal(treePD.getString("adjustedTotalLiabilities")));
                    }

                }

                List<Tree> allTreeList = new ArrayList<>();
                treeToList(dateList, allTreeList);
                for (Tree tree : allTreeList){
                    PageData treePD = tree.getPageData();
                    String addOrgId = treePD.getString("orgId");
                    if (CollectionUtil.isNotEmpty(addIds) && addIds.contains(addOrgId) && "2".equals(treePD.getString("isGroup"))){
                        totalBookAssets = BigDecimalUtil.add(totalBookAssets, BigDecimalUtil.toBigdecimal(treePD.getString("totalBookAssets")));
                        totalBookLiabilities = BigDecimalUtil.add(totalBookLiabilities, BigDecimalUtil.toBigdecimal(treePD.getString("totalBookLiabilities")));

                        adjustedTotalAssets = BigDecimalUtil.add(adjustedTotalAssets, BigDecimalUtil.toBigdecimal(treePD.getString("adjustedTotalAssets")));
                        adjustedTotalLiabilities = BigDecimalUtil.add(adjustedTotalLiabilities, BigDecimalUtil.toBigdecimal(treePD.getString("adjustedTotalLiabilities")));
                    }
                }

                totalPD.put("totalBookAssets", totalBookAssets.toPlainString());
                totalPD.put("totalBookLiabilities", totalBookLiabilities.toPlainString());
                totalPD.put("book_asset_liability", BigDecimalUtil.divide(totalBookLiabilities, totalBookAssets, 2, BigDecimal.ROUND_HALF_UP, 100));
                totalPD.put("actual_asset_liability", BigDecimalUtil.divide(adjustedTotalLiabilities, adjustedTotalAssets, 2, BigDecimal.ROUND_HALF_UP, 100));
                totalTree.setPageData(totalPD);

                dateList = dateList.stream().filter(p -> "2".equals(p.getPageData().getString("isMain"))).collect(Collectors.toList());
                dateList.add(totalTree);
            }

            ListResult Result = new ListResult(CommonCode.SUCCESS);
            Result.setList(dateList);
            return Result;
        } catch (Exception e) {
            LOGGER.error(ExceptionUtils.getStackTrace(e));
            return new ListResult<>(CommonCode.ERROR);
        }
    }

    private void treeToList(List<Tree> dataList, List<Tree> allList){
        for (Tree tree : dataList){
            allList.add(tree);
            if(CollectionUtil.isNotEmpty(tree.getChildren())){
                treeToList(tree.getChildren(), allList);
            }
        }
    }



//    public R industryDebtExport(PageData pd){
//        try {
//            String year = pd.getString("reportTime").substring(0, 4);
//            Integer month = Integer.valueOf(pd.getString("reportTime").substring(5, 7));
//            String unitName = orgzationDao.findbyid(pd.getString("orgId")).getString("orgName");
//            List<Tree> dataList = getIndustryDebt(pd).getList();
//            pd.put("reportTime", pd.getString("reportTime") + "-01");
//            Map<String, Object> map = new HashMap<>();
//            map.put("unitName", unitName);
//            map.put("year", year);
//            map.put("month", month);
//            String key = System.currentTimeMillis() + "-" + UUID.randomUUID().toString().replace("-", "");
//            String fileName = key + ".xlsx";
//            String exportPath = environment.getProperty("excel.path");
//
//            /**
//             * 导出路径不存在则创建
//             */
//            File file = new File(exportPath);
//            if (!file.exists()) {
//                file.mkdirs();
//            }
//            InputStream inputStream = this.getClass().getResourceAsStream("/exceldemo/industryDebt.xlsx");
//            ExcelWriter excelWriter = EasyExcel.write(exportPath + fileName).withTemplate(inputStream).build();
//            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
//            WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
//            excelWriter.fill(map, writeSheet);
//
//            excelWriter.fill(new FillWrapper(dataToExcel(treeToList(dataList))), fillConfig, writeSheet);
//            excelWriter.finish();
//
//            redisUtils.set(key, unitName + "_" + month +"月份国有企业负债监测与预警表（企业）", 10 * 60);
//            PageData pageData = new PageData();
//            pageData.put("key",  key);
//            R objResult = new R(CommonCode.SUCCESS);
//            objResult.setPageData(pageData);
//            return objResult;
//        }catch (Exception e){
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new R(CommonCode.ERROR);
//        }
//
//    }


    private List<Tree> treeToList(List<Tree> dataList){
        List<Tree> list = new ArrayList<>();
        for (Tree tree : dataList){
            list.add(tree);
            if (CollectionUtil.isNotEmpty(tree.getChildren())){
                list.addAll(treeToList(tree.getChildren()));
            }
        }
        return list;
    }
    private List<IndustryDebtExcelBean> dataToExcel(List<Tree> dataList){
        List<IndustryDebtExcelBean> industryDebtExcelBeans = new ArrayList<>();
        int index = 1;

        for (Tree tree : dataList){
            PageData debtInfo = tree.getPageData();

            IndustryDebtExcelBean bean = IndustryDebtExcelBean.builder().index(String.valueOf(index)).orgName(debtInfo.getString("orgName"))
                    .industryName(debtInfo.getString("industryName")).bookAssetLiability(debtInfo.getString("book_asset_liability"))
                    .actualAssetLiability(debtInfo.getString("actual_asset_liability")).debtOrgAvgValue(debtInfo.getString("G1_org_avgValue"))
                    .debtOrgLowValue(debtInfo.getString("G1_org_lowValue")).debtOrgBadValue(debtInfo.getString("G1_org_badValue"))
                    .debtIndustryAvgValue(debtInfo.getString("G1_industry_avgValue")).debtIndustryLowValue(debtInfo.getString("G1_industry_lowValue"))
                    .debtIndustryBadValue(debtInfo.getString("G1_industry_badValue")).multipleInterest(debtInfo.getString("multiple_interest"))

                    .earnedInterestOrgAvgValue(debtInfo.getString("G2_org_avgValue")).earnedInterestOrgLowValue(debtInfo.getString("G2_org_lowValue"))
                    .earnedInterestOrgBadValue(debtInfo.getString("G2_org_badValue")).earnedInterestIndustryAvgValue(debtInfo.getString("G2_industry_avgValue"))
                    .earnedInterestIndustryLowValue(debtInfo.getString("G2_industry_lowValue")).earnedInterestIndustryBadValue(debtInfo.getString("G2_industry_badValue"))

                    .interestBearing(debtInfo.getString("interest_bearing")).interestBearingOrgAvgValue(debtInfo.getString("G3_org_avgValue"))
                    .interestBearingOrgLowValue(debtInfo.getString("G3_org_lowValue")).interestBearingOrgBadValue(debtInfo.getString("G3_org_badValue"))
                    .interestBearingIndustryAvgValue(debtInfo.getString("G3_industry_avgValue")).interestBearingIndustryLowValue(debtInfo.getString("G3_industry_lowValue"))
                    .interestBearingIndustryBadValue(debtInfo.getString("G3_industry_badValue")).cashFlow(debtInfo.getString("cash_flow"))

                    .cashFlowOrgAvgValue(debtInfo.getString("G4_org_avgValue")).cashFlowOrgLowValue(debtInfo.getString("G4_org_lowValue"))
                    .cashFlowOrgBadValue(debtInfo.getString("G4_org_badValue")).cashFlowIndustryAvgValue(debtInfo.getString("G4_industry_avgValue"))
                    .cashFlowIndustryLowValue(debtInfo.getString("G4_industry_lowValue")).cashFlowIndustryBadValue(debtInfo.getString("G4_industry_badValue"))
                    .totalBookAssets(debtInfo.getString("totalBookAssets")).creditFalseAssets(debtInfo.getString("creditFalseAssets"))
                    .adjustedTotalAssets(debtInfo.getString("adjustedTotalAssets")).totalBookLiabilities(debtInfo.getString("totalBookLiabilities"))
                    .mingRealDebt(debtInfo.getString("mingRealDebt")).adjustedTotalLiabilities(debtInfo.getString("adjustedTotalLiabilities"))
                    .build();
            index++;

            industryDebtExcelBeans.add(bean);
        }
        return industryDebtExcelBeans;
    }


    //获取集团风险预警红灯的列表
//    public ListResult getGrouoIndustryDebtWarnningList(PageData pd) {
//        try {
//            TreeUtli treeUtli = new TreeUtli();
//            String[] codeList = {"G1", "G2", "G3", "G4"};
//            if (Tools.isEmpty(pd.getString("orgId"))) {
//                pd.put("orgId", TokenUtil.getTokenOrgId());
//            }
//            PageData org = orgzationDao.findbyid(pd.getString("orgId"));
//            pd.put("codeList", codeList);
//            List<PageData> groupList = new ArrayList<>();
//
//            String year = pd.getString("reportTime").substring(0, 4);
//            String month = pd.getString("reportTime").substring(5, 7);
//            pd.put("year", year);
//            pd.put("month", month);
//            pd.put("list", codeList);
//            if ("0".equals(org.getString("parentId"))) {
//                String dateStr = year + StringPool.DASH + month;
//                if (orgService.getDTFlag(dateStr)){
//                    groupList = orgzationDao.findGZWUnitsFilterDT();
//                }else {
//                    groupList = orgzationDao.findGZWUnits();
//                }
//            } else {
//                org.put("id", pd.getString("orgId"));
//                groupList.add(org);
//            }
//            List<PageData> dateList = new ArrayList<>();
//            for (PageData groupPd : groupList) {
//                pd.put("orgId", groupPd.getString("id"));
//                List<PageData> group = indicatorsValueDao.getIndustryDebt(pd);
//                if (group.size() > 0) {
//                    for (PageData p : group) {
//                        if (Tools.isEmpty(p.getString("book_asset_liability"))) {
//                            continue;
//                        } else {
//                            BigDecimal book_asset_liability = new BigDecimal(p.getString("book_asset_liability") == null ? "0" : p.getString("book_asset_liability"));
//                            BigDecimal actual_asset_liability = new BigDecimal(p.getString("actual_asset_liability") == null ? "0" : p.getString("actual_asset_liability"));
//                            BigDecimal multiple_interest = new BigDecimal(p.getString("multiple_interest") == null ? "0" : p.getString("multiple_interest"));
//                            BigDecimal interest_bearing = new BigDecimal(p.getString("interest_bearing") == null ? "0" : p.getString("interest_bearing"));
//                            BigDecimal cash_flow = new BigDecimal(p.getString("cash_flow") == null ? "0" : p.getString("cash_flow"));
//
//                            BigDecimal G1_org_badValue = new BigDecimal(p.getString("G1_org_badValue") == null ? "0" : p.getString("G1_org_badValue"));
//                            BigDecimal G2_org_badValue = new BigDecimal(p.getString("G2_org_badValue") == null ? "0" : p.getString("G2_org_badValue"));
//                            BigDecimal G3_org_badValue = new BigDecimal(p.getString("G3_org_badValue") == null ? "0" : p.getString("G3_org_badValue"));
//                            BigDecimal G4_org_badValue = new BigDecimal(p.getString("G4_org_badValue") == null ? "0" : p.getString("G4_org_badValue"));
//                            for (String code : codeList) {
//                                PageData pageData = new PageData();
//                                pageData.put("orgName", groupPd.getString("name"));
//                                switch (code) {
//                                    case "G1":
//                                        pageData.put("indicator", "资产负债率(%)");
//                                        if (book_asset_liability.compareTo(G1_org_badValue) == 1) {
//                                            pageData.put("tip", "负债率账面值" + book_asset_liability + "%");
//                                            dateList.add(pageData);
//                                        }
//                                        if (actual_asset_liability.compareTo(G1_org_badValue) == 1) {
//                                            pageData.put("tip", "负债率实际值" + actual_asset_liability + "%");
//                                            dateList.add(pageData);
//                                        }
//                                        break;
//                                    case "G2":
//                                        pageData.put("indicator", "已获利息倍数");
//                                        if (multiple_interest.compareTo(G2_org_badValue) == -1) {
//                                            pageData.put("tip", "已获利息倍数" + multiple_interest);
//                                            dateList.add(pageData);
//                                        }
//                                        break;
//                                    case "G3":
//                                        pageData.put("indicator", "带息负债比率(%)");
//                                        if (interest_bearing.compareTo(G3_org_badValue) == 1) {
//                                            pageData.put("tip", "带息负债比率" + interest_bearing + "%");
//                                            dateList.add(pageData);
//                                        }
//                                        break;
//                                    case "G4":
//                                        pageData.put("indicator", "现金流动负债比率(%)");
//                                        if (cash_flow.compareTo(G4_org_badValue) == -1) {
//                                            pageData.put("tip", "现金流动负债比率" + cash_flow + "%");
//                                            dateList.add(pageData);
//                                        }
//                                        break;
//                                    default:
//                                        break;
//
//                                }
//                            }
//                        }
//                    }
//
//                }
//
//            }
//            ListResult Result = new ListResult(CommonCode.SUCCESS);
//            Result.setList(dateList);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *快报指标趋势
//     * */
//    public ListResult expressTrend(PageData pd) {
//        try {
//            PageData indic = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            boolean flag = false;
//            if (!indic.getString("fieldName").contains("SUM_")) {
//                pd.put("isMonth", 1);//需累计的值
//                flag = true;
//            }
//            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
//            String year = pd.getString("year");
//
//            if (StringUtil.isBlank(year)){
//                year = df.format(new Date()).substring(0, 4);
//            }
//
//            Map<String, NewBulletinVO> bulletinMap = new HashMap<>();
//            if (flag){
//                PageData org = orgzationDao.findbyid(pd.getString("orgId"));
//                String typeCode = org.getString("typeCode");
//
//                List<NewBulletinVO> bulletinList;
//                if ("1".equals(typeCode) || "2".equals(typeCode)){
//                    bulletinList = newBulletinService.getSingleListByYear(null, pd.getString("orgId"));
//                }else {
//                    bulletinList = newBulletinService.getGroupListByYear(null, pd.getString("orgId"));
//                }
//                if(CollectionUtil.isNotEmpty(bulletinList)){
//                    bulletinMap = bulletinList.stream().filter(bulletin -> bulletin.getReportTime() != null).collect(Collectors
//                            .toMap(bulletin -> DateUtil.format(bulletin.getReportTime(), DateUtil.PATTERN_DATE), bulletin -> bulletin));
//                }
//            }
//
//            //获取已填的月份
//            List<Integer> filledMonth = newBulletinService.findFillMonths(null, pd.getString("orgId"), year, "0");
//            List<PageData> list = indicatorsValueDao.getExpressTrend(pd);
//            int m = 1;
//            String columnName =  indic.getString("fieldName");
//            for (PageData p : list) {
//                p.put("fmonth", formatDigit(p.getString("fmonth")) + "月");
//                boolean isFilled = false;
//                if (pd.getString("year").equals(year)) {
//                    for (int months : filledMonth) {
//                        if (m == months) {
//                            isFilled = true;
//                            if (flag){
//                                String reportTime = year + "-" + months + "-01";
//                                String lastReportTime = (Integer.valueOf(year) - 1) + "-" + months + "-01";
//                                if (bulletinMap.containsKey(reportTime)){
//                                    NewBulletinVO bulletinData= bulletinMap.get(reportTime);
//                                    if (CollectionUtil.isNotEmpty(bulletinData.getBulletinValues())){
//                                        for (BulletinValue value : bulletinData.getBulletinValues()){
//                                            if(columnName.equals(value.getColumnName())){
//                                                p.put("thisSum", value.getYearAmount());
//                                            }
//                                        }
//                                    }
//                                }
//
//                                if (bulletinMap.containsKey(lastReportTime)){
//                                    NewBulletinVO bulletinData= bulletinMap.get(lastReportTime);
//                                    if (CollectionUtil.isNotEmpty(bulletinData.getBulletinValues())){
//                                        for (BulletinValue value : bulletinData.getBulletinValues()){
//                                            if(columnName.equals(value.getColumnName())){
//                                                p.put("lastSum", value.getYearAmount());
//                                            }
//                                        }
//                                    }
//                                }
//
//                                BigDecimal sumValue = BigDecimalUtil.toBigdecimal(p.getString("thisSum"));
//                                BigDecimal lastSumValue = BigDecimalUtil.toBigdecimal(p.getString("lastSum"));
//
//                                p.put("sumRate", BigDecimalUtil.divide(BigDecimalUtil.subtract(sumValue, lastSumValue),
//                                        lastSumValue, 2, BigDecimal.ROUND_HALF_UP, 100));
//                            }
//
//                        }
//                    }
//                    if (!isFilled) {
//                        p.put("thisYear", "");
//                        p.put("thisSum", "");
//                        p.put("thisYearRate", "");
//                        p.put("lastMonth", "");
//                        p.put("lastMonthRate", "");
//                    }
//                }
//                m++;
//            }
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     * 快报指标报表综合分析
//     * */
//    public ListResult comprehensiveReport(PageData pd) {
//        try {
//            TreeUtli treeUtli = new TreeUtli();
//            String year = pd.getString("reportTime").substring(0, 4);
//            String month = pd.getString("reportTime").substring(5, 7);
//
//            List<PageData> orgIds = new ArrayList<>();
//            PageData org = orgzationDao.findbyid(pd.getString("orgId"));
//            List<PageData> orgAll=orgzationDao.list(null);
//            List<String> parentIds=orgAll.stream().map(record->record.getString("parentId")).collect(Collectors.toList());
//            if (Tools.isEmpty(pd.getString("orgId"))) {
//                pd.put("isGzw", 1);
//                String dateStr = year + StringPool.DASH + month;
//                if (orgService.getDTFlag(dateStr)){
//                    orgIds = orgzationDao.findGZWUnitsFilterDT();
//                }else {
//                    orgIds = orgzationDao.findGZWUnits();
//                }
//            } else {
//                orgIds = orgzationDao.findbyPid(pd.getString("orgId"));
//                for(PageData p:orgIds){
//                    String id=p.getString("id");
//                    //第一个本级节点isGroup为0，除此之外如果企业下面还有子企业，那么给这家企业设置为isGroup=1
//                    if(parentIds.contains(id)){
//                        p.put("isGroup","1");
//                    }
//                }
//                //额外在顶部插入一个本级节点
//                orgIds.add(0,org);
//            }
//            PageData p1 = new PageData();
//            if (org != null && "0".equals(org.getString("isunit"))) {
//                for (PageData p : orgIds) {
//                    if (p.getString("id").equals(pd.getString("orgId"))) {
//                        p1.putAll(p);
//                    }
//                }
////                orgIds.remove(p1);
//            }
//            if (orgIds.size() == 0) {
//                return new ListResult(CommonCode.SUCCESS);
//            }
//            String lastyear = String.valueOf(Integer.valueOf(year) - 1);
//            pd.put("orgIds", orgIds);
//            pd.put("year", year);
//            pd.put("lastyear", lastyear);
//            pd.put("month", month);
//            pd.put("codes", new String[]{"K1", "K19", "K22", "K30", "K36","K20"});
//
//            int year1 = Integer.valueOf(year);
//            int month1 = Integer.valueOf(month);
//            List<PageData> list = indicatorsValueDao.comprehensiveAllReport(pd);
//            List<PageData> dateList = new ArrayList<>();
//
//            LinkedHashMap<String, List<PageData>> plateMap = list.stream().collect(Collectors.groupingBy(e -> e.getString("orgId") + "_" + e.getString("orgName")+"_"+e.getString("isGroup"),LinkedHashMap::new,Collectors.toList()));
//
//            for(PageData pOrg:orgIds){
//                String pOrgIds=pOrg.getString("id");
//                String pOrgName=pOrg.getString("name");
//                String pIsGroup="0";
//                if(Tools.notEmpty(pd.getString("isGzw"))||pOrg.containsKey("isGroup")){
//                    pIsGroup="1";
//                }
//                String key=pOrgIds+"_"+pOrgName+"_"+pIsGroup;
//                //去年资产总额
//                BigDecimal last_K22 = new BigDecimal("0");
//                //资产总额
//                BigDecimal K22 = new BigDecimal("0");
//                //资产总额增减率
//                BigDecimal Rate_K22 = new BigDecimal("0");
//
//                //去年负债总额
//                BigDecimal last_K30 = new BigDecimal("0");
//                //负债总额
//                BigDecimal K30 = new BigDecimal("0");
//                //负债总额增减率
//                BigDecimal Rate_K30 = new BigDecimal("0");
//
//                //去年净资产总额
//                BigDecimal last_K36 = new BigDecimal("0");
//                //净资产总额
//                BigDecimal K36 = new BigDecimal("0");
//                //净资产增减率
//                BigDecimal Rate_K36 = new BigDecimal("0");
//
//                //去年资产负债率
//                BigDecimal Last_Balance = new BigDecimal("0");
//                //资产负债率
//                BigDecimal This_Balance = new BigDecimal("0");
//                //资产负债率增减百分比
//                BigDecimal Grad_Balance = new BigDecimal("0");
//
//                //去年营业总收入
//                BigDecimal last_K1 = new BigDecimal("0");
//                //营业总收入
//                BigDecimal K1 = new BigDecimal("0");
//                //营业总收入增减率
//                BigDecimal Rate_K1 = new BigDecimal("0");
//
//                //去年利润总额
//                BigDecimal last_K19 = new BigDecimal("0");
//                //利润总额
//                BigDecimal K19 = new BigDecimal("0");
//                //利润总额增减率
//                BigDecimal Rate_K19 = new BigDecimal("0");
//
//                //去年净利润
//                BigDecimal last_K20 = new BigDecimal("0");
//                //净利润
//                BigDecimal K20 = new BigDecimal("0");
//                //净利润增减率
//                BigDecimal Rate_K20 = new BigDecimal("0");
//                if(!plateMap.containsKey(key)){
//                    continue;
//                }
//                List<PageData> map = plateMap.get(key);
//                for (PageData p : map) {
//                    int m = p.getInteger("fmonth");
//                    int y = p.getInteger("fyear");
//                    String code = p.getString("code");
//                    String orgId = p.getString("orgId");
//                    String value = p.getString("fvalue");
//                    //今年
//                    if (y == year1) {
//                        //当前月
//                        if (m <= month1) {
//                            if ("K1".equals(code)) {
//                                K1 = K1.add(new BigDecimal(value));
//                            }
//                            if ("K19".equals(code)) {
//                                K19 = K19.add(new BigDecimal(value));
//                            }
//                            if ("K20".equals(code)) {
//                                K20 = K20.add(new BigDecimal(value));
//                            }
//
//                            if (m == month1) {
//                                //资产总额
//                                if ("K22".equals(code)) {
//                                    K22 = K22.add(new BigDecimal(value));
//                                }
//                                //负债总额
//                                if ("K30".equals(code)) {
//                                    K30 = K30.add(new BigDecimal(value));
//                                }
//                                //净资产总额
//                                if ("K36".equals(code)) {
//                                    K36 = K36.add(new BigDecimal(value));
//                                }
//                            }
//                        }
//                    }
//                    //去年
//                    if (y == (year1 - 1)) {
//                        //当前月
//                        if (m <= month1) {
//                            if ("K1".equals(code)) {
//                                last_K1 = last_K1.add(new BigDecimal(value));
//                            }
//                            if ("K19".equals(code)) {
//                                last_K19 = last_K19.add(new BigDecimal(value));
//                            }
//                            if ("K20".equals(code)) {
//                                last_K20 = last_K20.add(new BigDecimal(value));
//                            }
//
//                            if (m == month1) {
//                                //资产总额
//                                if ("K22".equals(code)) {
//                                    last_K22 = last_K22.add(new BigDecimal(value));
//                                }
//                                //负债总额
//                                if ("K30".equals(code)) {
//                                    last_K30 = last_K30.add(new BigDecimal(value));
//                                }
//                                //净资产总额
//                                if ("K36".equals(code)) {
//                                    last_K36 = last_K36.add(new BigDecimal(value));
//                                }
//                            }
//                        }
//                    }
//                }
//                if (last_K22.floatValue() > 0) {
//                    Rate_K22 = (K22.subtract(last_K22)).divide(last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (last_K22.floatValue() != 0) {
//                        Rate_K22 = (last_K22.subtract(K22)).divide(last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (last_K30.floatValue() > 0) {
//                    Rate_K30 = (K30.subtract(last_K30)).divide(last_K30, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (last_K30.floatValue() != 0) {
//                        Rate_K30 = (last_K30.subtract(K30)).divide(last_K30, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (last_K36.floatValue() > 0) {
//                    Rate_K36 = (K36.subtract(last_K36)).divide(last_K36, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (last_K36.floatValue() != 0) {
//                        Rate_K36 = (last_K36.subtract(K36)).divide(last_K36, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (last_K1.floatValue() > 0) {
//                    Rate_K1 = (K1.subtract(last_K1)).divide(last_K1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (last_K1.floatValue() != 0) {
//                        Rate_K1 = (last_K1.subtract(K1)).divide(last_K1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (last_K19.floatValue() > 0) {
//                    Rate_K19 = (K19.subtract(last_K19)).divide(last_K19, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (last_K19.floatValue() != 0) {
//                        Rate_K19 = (last_K19.subtract(K19)).divide(last_K19, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (last_K20.floatValue() > 0) {
//                    Rate_K20 = (K20.subtract(last_K20)).divide(last_K20, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (last_K20.floatValue() != 0) {
//                        Rate_K20 = (last_K20.subtract(K20)).divide(last_K20, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (K22.floatValue() != 0) {
//                    This_Balance = K30.divide(K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                }
//                if (last_K22.floatValue() != 0) {
//                    Last_Balance = last_K30.divide(last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                }
//                if (Last_Balance.floatValue() != 0) {
//                    Grad_Balance = This_Balance.subtract(Last_Balance).setScale(2);
//                }
//                PageData p3 = new PageData();
//                p3.put("orgId", key.split("_")[0]);
//                if (org!=null&&Tools.notEmpty(org.getString("id"))&&!key.split("_")[0].equals(org.getString("id"))) {
//                    List<PageData> children = orgzationDao.findchildbyid(p3.getString("orgId"));
//                    p3.put("orgName", key.split("_")[1]);
//                    if (children.size() > 1) {
//                        p3.put("hasChild", true);
//                    } else {
//                        p3.put("hasChild", false);
//                    }
//                }else {
//                    p3.put("hasChild", false);
//                    if (Tools.notEmpty(pd.getString("isGzw"))){
//                        p3.put("orgName", key.split("_")[1]);
//                    }else {
//                        p3.put("orgName", key.split("_")[1]+"(本级)");
//                    }
//
//                }
//
//                p3.put("K1", K1.toPlainString());
//                p3.put("last_K1", last_K1.toPlainString());
//                p3.put("Rate_K1", Rate_K1.setScale(2).toPlainString());
//                p3.put("Grad_K1", K1.subtract(last_K1));
//
//                p3.put("K19", K19.toPlainString());
//                p3.put("last_K19", last_K19.toPlainString());
//                p3.put("Rate_K19", Rate_K19.setScale(2).toPlainString());
//                p3.put("Grad_K19", K19.subtract(last_K19));
//
//                p3.put("K20", K20.toPlainString());
//                p3.put("last_K20", last_K20.toPlainString());
//                p3.put("Rate_K20", Rate_K20.setScale(2).toPlainString());
//                p3.put("Grad_K20", K20.subtract(last_K20));
//
//                p3.put("K22", K22.toPlainString());
//                p3.put("last_K22", last_K22.toPlainString());
//                p3.put("Rate_K22", Rate_K22.setScale(2).toPlainString());
//
//                p3.put("K30", K30.toPlainString());
//                p3.put("last_K30", last_K30.toPlainString());
//                p3.put("Rate_K30", Rate_K30.setScale(2).toPlainString());
//
//                p3.put("K36", K36.toPlainString());
//                p3.put("last_K36", last_K36.toPlainString());
//                p3.put("Rate_K36", Rate_K36.setScale(2).toPlainString());
//
//                p3.put("This_Balance", This_Balance.toPlainString());
//                p3.put("Last_Balance", Last_Balance.toPlainString());
//                p3.put("Grad_Balance", Grad_Balance.toPlainString());
//
//                dateList.add(p3);
//
//        }
//
//            ListResult Result = new ListResult(CommonCode.SUCCESS);
//            Result.setList(dateList);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

    /**
     * 返回集团企业主要指标分析表结果
     * @param pd
     * @return
     */
    public ListResult comprehensiveExportResult(PageData pd){
        try {
            String year = pd.getString("reportTime").substring(0, 4);
            String month = pd.getString("reportTime").substring(5, 7);
            List<PageData> tempOrgs=orgzationService.getGzwSubordinateList();
            List<PageData> orgIds=new ArrayList<>();
            for(PageData p:tempOrgs){
                if(p.containsKey("isHasChild")){
                    p.put("isGroup","1");
                    orgIds.add(p);
                    PageData parentP=new PageData();
                    parentP.put("orgId",p.getString("orgId"));
                    parentP.put("orgName",p.getString("orgName"));
                    parentP.put("isBj","1");
                    parentP.put("isGroup","0");
                    orgIds.add(parentP);
                }else{
                    p.put("isGroup","0");
                    orgIds.add(p);
                }
            }

            if (orgIds.size() == 0) {
                return new ListResult(CommonCode.SUCCESS);
            }
            String lastyear = String.valueOf(Integer.valueOf(year) - 1);
            pd.put("orgIds", orgIds);
            pd.put("year", year);
            pd.put("lastyear", lastyear);
            pd.put("month", month);
            pd.put("codes", new String[]{"K1", "K19", "K22", "K30", "K36","K20"});

            int year1 = Integer.valueOf(year);
            int month1 = Integer.valueOf(month);
            List<PageData> list = indicatorsValueDao.comprehensiveAllReport(pd);
            List<PageData> dateList = new ArrayList<>();
            LinkedHashMap<String,List<PageData>> plateMap=list.stream().collect(Collectors.groupingBy(e -> e.getString("orgId") + "_" + e.getString("orgName")+"_"+e.getString("isGroup"),LinkedHashMap::new,Collectors.toList()));

            for(PageData pOrg:orgIds){
                String pOrgIds=pOrg.getString("orgId");
                String pOrgName=pOrg.getString("orgName");
                String pIsGroup=pOrg.getString("isGroup");
                String key=pOrgIds+"_"+pOrgName+"_"+pIsGroup;
                //去年资产总额
                BigDecimal last_K22 = new BigDecimal("0");
                //资产总额
                BigDecimal K22 = new BigDecimal("0");
                //资产总额增减率
                BigDecimal Rate_K22 = new BigDecimal("0");

                //去年负债总额
                BigDecimal last_K30 = new BigDecimal("0");
                //负债总额
                BigDecimal K30 = new BigDecimal("0");
                //负债总额增减率
                BigDecimal Rate_K30 = new BigDecimal("0");

                //去年净资产总额
                BigDecimal last_K36 = new BigDecimal("0");
                //净资产总额
                BigDecimal K36 = new BigDecimal("0");
                //净资产增减率
                BigDecimal Rate_K36 = new BigDecimal("0");

                //去年资产负债率
                BigDecimal Last_Balance = new BigDecimal("0");
                //资产负债率
                BigDecimal This_Balance = new BigDecimal("0");
                //资产负债率增减百分比
                BigDecimal Grad_Balance = new BigDecimal("0");

                //去年营业总收入
                BigDecimal last_K1 = new BigDecimal("0");
                //营业总收入
                BigDecimal K1 = new BigDecimal("0");
                //营业总收入增减率
                BigDecimal Rate_K1 = new BigDecimal("0");

                //去年利润总额
                BigDecimal last_K19 = new BigDecimal("0");
                //利润总额
                BigDecimal K19 = new BigDecimal("0");
                //利润总额增减率
                BigDecimal Rate_K19 = new BigDecimal("0");

                //去年净利润
                BigDecimal last_K20 = new BigDecimal("0");
                //净利润
                BigDecimal K20 = new BigDecimal("0");
                //净利润增减率
                BigDecimal Rate_K20 = new BigDecimal("0");

                if(!plateMap.containsKey(key)){
                    continue;
                }
                List<PageData> map = plateMap.get(key);

                for(PageData p:map){
                    int m = p.getInteger("fmonth");
                    int y = p.getInteger("fyear");
                    String code = p.getString("code");
                    String orgId = p.getString("orgId");
                    String value = p.getString("fvalue");
                    //今年
                    if (y == year1) {
                        //当前月
                        if (m <= month1) {
                            if ("K1".equals(code)) {
                                K1 = K1.add(new BigDecimal(value));
                            }
                            if ("K19".equals(code)) {
                                K19 = K19.add(new BigDecimal(value));
                            }
                            if ("K20".equals(code)) {
                                K20 = K20.add(new BigDecimal(value));
                            }

                            if (m == month1) {
                                //资产总额
                                if ("K22".equals(code)) {
                                    K22 = K22.add(new BigDecimal(value));
                                }
                                //负债总额
                                if ("K30".equals(code)) {
                                    K30 = K30.add(new BigDecimal(value));
                                }
                                //净资产总额
                                if ("K36".equals(code)) {
                                    K36 = K36.add(new BigDecimal(value));
                                }
                            }
                        }
                    }
                    //去年
                    if (y == (year1 - 1)) {
                        //当前月
                        if (m <= month1) {
                            if ("K1".equals(code)) {
                                last_K1 = last_K1.add(new BigDecimal(value));
                            }
                            if ("K19".equals(code)) {
                                last_K19 = last_K19.add(new BigDecimal(value));
                            }
                            if ("K20".equals(code)) {
                                last_K20 = last_K20.add(new BigDecimal(value));
                            }

                            if (m == month1) {
                                //资产总额
                                if ("K22".equals(code)) {
                                    last_K22 = last_K22.add(new BigDecimal(value));
                                }
                                //负债总额
                                if ("K30".equals(code)) {
                                    last_K30 = last_K30.add(new BigDecimal(value));
                                }
                                //净资产总额
                                if ("K36".equals(code)) {
                                    last_K36 = last_K36.add(new BigDecimal(value));
                                }
                            }
                        }
                    }
                }
                if (last_K22.floatValue() > 0) {
                    Rate_K22 = (K22.subtract(last_K22)).divide(last_K22, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                } else {
                    if (last_K22.floatValue() != 0) {
                        Rate_K22 = (last_K22.subtract(K22)).divide(last_K22, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                    }
                }
                if (last_K30.floatValue() > 0) {
                    Rate_K30 = (K30.subtract(last_K30)).divide(last_K30, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                } else {
                    if (last_K30.floatValue() != 0) {
                        Rate_K30 = (last_K30.subtract(K30)).divide(last_K30, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                    }
                }
                if (last_K36.floatValue() > 0) {
                    Rate_K36 = (K36.subtract(last_K36)).divide(last_K36, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                } else {
                    if (last_K36.floatValue() != 0) {
                        Rate_K36 = (last_K36.subtract(K36)).divide(last_K36, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                    }
                }
                if (last_K1.floatValue() > 0) {
                    Rate_K1 = (K1.subtract(last_K1)).divide(last_K1, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                } else {
                    if (last_K1.floatValue() != 0) {
                        Rate_K1 = (last_K1.subtract(K1)).divide(last_K1, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                    }
                }
                if (last_K19.floatValue() > 0) {
                    Rate_K19 = (K19.subtract(last_K19)).divide(last_K19, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                } else {
                    if (last_K19.floatValue() != 0) {
                        Rate_K19 = (last_K19.subtract(K19)).divide(last_K19, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                    }
                }
                if (last_K20.floatValue() > 0) {
                    Rate_K20 = (K20.subtract(last_K20)).divide(last_K20, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                } else {
                    if (last_K20.floatValue() != 0) {
                        Rate_K20 = (last_K20.subtract(K20)).divide(last_K20, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                    }
                }
                if (K22.floatValue() != 0) {
                    This_Balance = K30.divide(K22, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                }
                if (last_K22.floatValue() != 0) {
                    Last_Balance = last_K30.divide(last_K22, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                }
                if (Last_Balance.floatValue() != 0) {
                    Grad_Balance = This_Balance.subtract(Last_Balance).setScale(2);
                }
                PageData p3 = new PageData();
                p3.put("orgId", key.split("_")[0]);
                if(pOrg.containsKey("isBj")){
                    p3.put("orgName", key.split("_")[1]+"(本级)");
                }else{
                    p3.put("orgName", key.split("_")[1]);
                }
                p3.put("K1", BigDecimalUtil.toDoubleValue(K1));
                p3.put("last_K1", BigDecimalUtil.toDoubleValue(last_K1));
                p3.put("Rate_K1", BigDecimalUtil.toDoubleValue(Rate_K1));
                p3.put("Grad_K1", K1.subtract(last_K1));

                p3.put("K19", BigDecimalUtil.toDoubleValue(K19));
                p3.put("last_K19", BigDecimalUtil.toDoubleValue((last_K19)));
                p3.put("Rate_K19", BigDecimalUtil.toDoubleValue(Rate_K19));
                p3.put("Grad_K19", K19.subtract(last_K19));

                p3.put("K20", BigDecimalUtil.toDoubleValue(K20));
                p3.put("last_K20", BigDecimalUtil.toDoubleValue(last_K20));
                p3.put("Rate_K20", BigDecimalUtil.toDoubleValue(Rate_K20));
                p3.put("Grad_K20", K20.subtract(last_K20));

                p3.put("K22", BigDecimalUtil.toDoubleValue(K22));
                p3.put("last_K22", BigDecimalUtil.toDoubleValue(last_K22));
                p3.put("Rate_K22", BigDecimalUtil.toDoubleValue(Rate_K22));

                p3.put("K30", BigDecimalUtil.toDoubleValue(K30));
                p3.put("last_K30", BigDecimalUtil.toDoubleValue(last_K30));
                p3.put("Rate_K30", BigDecimalUtil.toDoubleValue(Rate_K30));

                p3.put("K36", BigDecimalUtil.toDoubleValue(K36));
                p3.put("last_K36", BigDecimalUtil.toDoubleValue(last_K36));
                p3.put("Rate_K36", BigDecimalUtil.toDoubleValue(Rate_K36));

                p3.put("This_Balance", BigDecimalUtil.toDoubleValue(This_Balance));
                p3.put("Last_Balance", BigDecimalUtil.toDoubleValue(Last_Balance));
                p3.put("Grad_Balance", BigDecimalUtil.toDoubleValue(Grad_Balance));

                dateList.add(p3);
            }

            ListResult Result = new ListResult(CommonCode.SUCCESS);
            Result.setList(dateList);
            return Result;
        } catch (Exception e) {
            LOGGER.error(ExceptionUtils.getStackTrace(e));
            return new ListResult<>(CommonCode.ERROR);
        }
    }

//    public void comprehensiveExport(PageData pd, HttpServletResponse response){
//        try{
//            String year = pd.getString("reportTime").substring(0, 4);
//            int intYear=Integer.parseInt(year);
//            String month = pd.getString("reportTime").substring(5, 7);
//            int intMonth=Integer.parseInt(month);
//            String startDay1=(intYear-1)+"年"+intMonth+"月底";
//            String endDay1=year+"年"+intMonth+"月底";
//            String startDay2=(intYear-1)+"年1-"+intMonth+"月底";
//            String endDay2=year+"年1-"+intMonth+"月底";
//            ListResult list = comprehensiveExportResult(pd);
//            List<PageData> dataList=list.getList();
//
////        list = list.stream().filter(p -> StringUtil.isNotBlank(p.getString("orgCode"))).collect(Collectors.toList());
//            String separator = File.separator;
//            String exlPath = separator + "exceldemo" + separator + "comprehensive.xlsx";
//            InputStream inputStream = this.getClass().getResourceAsStream(exlPath);
//            String fileName = URLEncoder.encode("集团企业主要指标分析表", "UTF-8");
//            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//            // 设置响应头和客户端保存文件名
//            response.setCharacterEncoding("utf-8");
//            OutputStream outputStream = response.getOutputStream();// 取得输出流
//            ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build();
//            WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
//            // 其他参数可以使用Map封装
//            Map<String, Object> otherMap = new HashMap<>(16);
//            otherMap.put("startDay1", startDay1);
//            otherMap.put("startDay2", startDay2);
//            otherMap.put("endDay1", endDay1);
//            otherMap.put("endDay2", endDay2);
//            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
//            excelWriter.fill(otherMap, writeSheet);
//            excelWriter.fill(dataList, fillConfig, writeSheet);
//            excelWriter.finish();
//            inputStream.close();
//            outputStream.close();
//        }catch (Exception e){
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//        }
//    }

//    /*
//     * 快报指标报表综合分析-按业务板块
//     * */
//    public ListResult businessSectorReport(PageData pd) {
//        try {
//            String year = pd.getString("reportTime").substring(0, 4);
//            String month = pd.getString("reportTime").substring(5, 7);
//            //拿到板块下的单位
//            List<PageData> businessSectorList = enterpriseService.selectDistinct(new PageData());
//            List<String> orgIds = new ArrayList<>();
//            //拿到单位id
//            businessSectorList.stream().collect(Collectors.groupingBy(e -> e.getString("orgId"))).forEach((s, pageData) -> {
//                orgIds.add(s);
//            });
//
//            int month1 = Integer.valueOf(month);
//            int year1 = Integer.valueOf(year);
//            PageData p = new PageData();
//            p.put("thisYear", Integer.valueOf(year));
//            p.put("lastYear", Integer.valueOf(year) - 1);
//            p.put("month", month1);
//            p.put("orgIds", orgIds);
//            p.put("codes", new String[]{"K1", "K19", "K22", "K30", "K36"});
//            List<PageData> l = indicatorsValueDao.plateReport(p);
//            //根据板块分组
//            Map<String, List<PageData>> plate = businessSectorList.stream().collect(Collectors.groupingBy(e -> e.getString("code")));
//            List<PageData> dateList = new ArrayList<>();
//            for (String s : plate.keySet()) {
//                //去年资产总额
//                BigDecimal sum_last_K22 = new BigDecimal("0");
//                //资产总额
//                BigDecimal sum_K22 = new BigDecimal("0");
//                //资产总额增减率
//                BigDecimal sum_Rate_K22 = new BigDecimal("0");
//
//                //去年负债总额
//                BigDecimal sum_last_K30 = new BigDecimal("0");
//                //负债总额
//                BigDecimal sum_K30 = new BigDecimal("0");
//                //负债总额增减率
//                BigDecimal sum_Rate_K30 = new BigDecimal("0");
//
//                //去年净资产总额
//                BigDecimal sum_last_K36 = new BigDecimal("0");
//                //净资产总额
//                BigDecimal sum_K36 = new BigDecimal("0");
//                //净资产增减率
//                BigDecimal sum_Rate_K36 = new BigDecimal("0");
//
//                //去年资产负债率
//                BigDecimal sum_Last_Balance = new BigDecimal("0");
//                //资产负债率
//                BigDecimal sum_This_Balance = new BigDecimal("0");
//                //资产负债率增减百分比
//                BigDecimal sum_Grad_Balance = new BigDecimal("0");
//                //去年营业总收入
//                BigDecimal sum_last_K1 = new BigDecimal("0");
//                //营业总收入
//                BigDecimal sum_K1 = new BigDecimal("0");
//                //营业总收入增减率
//                BigDecimal sum_Rate_K1 = new BigDecimal("0");
//                //去年利润总额
//                BigDecimal sum_last_K19 = new BigDecimal("0");
//                //利润总额
//                BigDecimal sum_K19 = new BigDecimal("0");
//                //利润总额增减率
//                BigDecimal sum_Rate_K19 = new BigDecimal("0");
//                //板块下的集合
//                List<PageData> list = plate.get(s);
//                //根据板块下单位分组
//                Map<String, List<PageData>> map1 = list.stream().collect(Collectors.groupingBy(e -> e.getString("orgId")));
//                for (String id : map1.keySet()) {
//                    if (Tools.notEmpty(id)) {
//                        //去年资产总额
//                        BigDecimal last_K22 = new BigDecimal("0");
//                        //资产总额
//                        BigDecimal K22 = new BigDecimal("0");
//                        //资产总额增减率
//                        BigDecimal Rate_K22 = new BigDecimal("0");
//
//                        //去年负债总额
//                        BigDecimal last_K30 = new BigDecimal("0");
//                        //负债总额
//                        BigDecimal K30 = new BigDecimal("0");
//                        //负债总额增减率
//                        BigDecimal Rate_K30 = new BigDecimal("0");
//
//                        //去年净资产总额
//                        BigDecimal last_K36 = new BigDecimal("0");
//                        //净资产总额
//                        BigDecimal K36 = new BigDecimal("0");
//                        //净资产增减率
//                        BigDecimal Rate_K36 = new BigDecimal("0");
//
//                        //去年资产负债率
//                        BigDecimal Last_Balance = new BigDecimal("0");
//                        //资产负债率
//                        BigDecimal This_Balance = new BigDecimal("0");
//                        //资产负债率增减百分比
//                        BigDecimal Grad_Balance = new BigDecimal("0");
//
//                        //去年营业总收入
//                        BigDecimal last_K1 = new BigDecimal("0");
//                        //营业总收入
//                        BigDecimal K1 = new BigDecimal("0");
//                        //营业总收入增减率
//                        BigDecimal Rate_K1 = new BigDecimal("0");
//
//                        //去年利润总额
//                        BigDecimal last_K19 = new BigDecimal("0");
//                        //利润总额
//                        BigDecimal K19 = new BigDecimal("0");
//                        //利润总额增减率
//                        BigDecimal Rate_K19 = new BigDecimal("0");
//
//                        String org_name = "";
//                        //循环指标
//                        for (PageData p2 : l) {
//                            int m = p2.getInteger("fmonth");
//                            int y = p2.getInteger("fyear");
//                            String code = p2.getString("code");
//                            String orgId = p2.getString("orgId");
//                            String value = p2.getString("fvalue");
//                            if (id.equals(orgId)) {
//                                if ("".equals(org_name)) {
//                                    org_name = p2.getString("orgName");
//                                }
//                                //今年
//                                if (y == year1) {
//                                    //当前月
//                                    if (m <= month1) {
//                                        if ("K1".equals(code)) {
//                                            K1 = K1.add(new BigDecimal(value));
//                                        }
//                                        if ("K19".equals(code)) {
//                                            K19 = K19.add(new BigDecimal(value));
//                                        }
//
//                                        if (m == month1) {
//                                            //资产总额
//                                            if ("K22".equals(code)) {
//                                                K22 = K22.add(new BigDecimal(value));
//                                            }
//                                            //负债总额
//                                            if ("K30".equals(code)) {
//                                                K30 = K30.add(new BigDecimal(value));
//                                            }
//                                            //净资产总额
//                                            if ("K36".equals(code)) {
//                                                K36 = K36.add(new BigDecimal(value));
//                                            }
//                                        }
//                                    }
//                                }
//                                //去年
//                                if (y == (year1 - 1)) {
//                                    //当前月
//                                    if (m <= month1) {
//                                        if ("K1".equals(code)) {
//                                            last_K1 = last_K1.add(new BigDecimal(value));
//                                        }
//                                        if ("K19".equals(code)) {
//                                            last_K19 = last_K19.add(new BigDecimal(value));
//                                        }
//
//                                        if (m == month1) {
//                                            //资产总额
//                                            if ("K22".equals(code)) {
//                                                last_K22 = last_K22.add(new BigDecimal(value));
//                                            }
//                                            //负债总额
//                                            if ("K30".equals(code)) {
//                                                last_K30 = last_K30.add(new BigDecimal(value));
//                                            }
//                                            //净资产总额
//                                            if ("K36".equals(code)) {
//                                                last_K36 = last_K36.add(new BigDecimal(value));
//                                            }
//                                        }
//                                    }
//                                }
//                            }
//                        }
//                        if (last_K22.floatValue() > 0) {
//                            Rate_K22 = (K22.subtract(last_K22)).divide(last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        } else {
//                            if (last_K22.floatValue() != 0) {
//                                Rate_K22 = (last_K22.subtract(K22)).divide(last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                            }
//                        }
//                        if (last_K30.floatValue() > 0) {
//                            Rate_K30 = (K30.subtract(last_K30)).divide(last_K30, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        } else {
//                            if (last_K30.floatValue() != 0) {
//                                Rate_K30 = (last_K30.subtract(K30)).divide(last_K30, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                            }
//                        }
//                        if (last_K36.floatValue() > 0) {
//                            Rate_K36 = (K36.subtract(last_K36)).divide(last_K36, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        } else {
//                            if (last_K36.floatValue() != 0) {
//                                Rate_K36 = (last_K36.subtract(K36)).divide(last_K36, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                            }
//                        }
//                        if (last_K1.floatValue() > 0) {
//                            Rate_K1 = (K1.subtract(last_K1)).divide(last_K1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        } else {
//                            if (last_K1.floatValue() != 0) {
//                                Rate_K1 = (last_K1.subtract(K1)).divide(last_K1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                            }
//                        }
//                        if (last_K19.floatValue() > 0) {
//                            Rate_K19 = (K19.subtract(last_K19)).divide(last_K19, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        } else {
//                            if (last_K19.floatValue() != 0) {
//                                Rate_K19 = (last_K19.subtract(K19)).divide(last_K19, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                            }
//                        }
//                        if (K22.floatValue() != 0) {
//                            This_Balance = K30.divide(K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        }
//                        if (last_K22.floatValue() != 0) {
//                            Last_Balance = last_K30.divide(last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        }
//                        if (Last_Balance.floatValue() != 0) {
//                            Grad_Balance = (This_Balance.subtract(Last_Balance)).divide(Last_Balance, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        }
//                        PageData p3 = new PageData();
//                        p3.put("orgName", org_name);
//                        p3.put("K1", K1.toPlainString());
//                        p3.put("last_K1", last_K1.toPlainString());
//                        p3.put("Rate_K1", Rate_K1.toPlainString());
//                        p3.put("Grad_K1", K1.subtract(last_K1));
//
//
//                        sum_K1 = sum_K1.add(K1);
//                        sum_last_K1 = sum_last_K1.add(last_K1);
//
//
//                        p3.put("K19", K19.toPlainString());
//                        p3.put("last_K19", last_K19.toPlainString());
//                        p3.put("Rate_K19", Rate_K19.toPlainString());
//                        p3.put("Grad_K19", K19.subtract(last_K19));
//
//                        sum_K19 = sum_K19.add(K19);
//                        sum_last_K19 = sum_last_K19.add(last_K19);
//
//                        p3.put("K22", K22.toPlainString());
//                        p3.put("last_K22", last_K22.toPlainString());
//                        p3.put("Rate_K22", Rate_K22.toPlainString());
//
//                        sum_K22 = sum_K22.add(K22);
//                        sum_last_K22 = sum_last_K22.add(last_K22);
//
//                        p3.put("K30", K30.toPlainString());
//                        p3.put("last_K30", last_K30.toPlainString());
//                        p3.put("Rate_K30", Rate_K30.toPlainString());
//
//                        sum_K30 = sum_K30.add(K30);
//                        sum_last_K30 = sum_last_K30.add(last_K30);
//
//                        p3.put("K36", K36.toPlainString());
//                        p3.put("last_K36", last_K36.toPlainString());
//                        p3.put("Rate_K36", Rate_K36.toPlainString());
//
//                        sum_K36 = sum_K36.add(K36);
//                        sum_last_K36 = sum_last_K36.add(last_K36);
//
//                        p3.put("This_Balance", This_Balance.toPlainString());
//                        p3.put("Last_Balance", Last_Balance.toPlainString());
//                        p3.put("Grad_Balance", Grad_Balance.toPlainString());
//
//                        sum_This_Balance = sum_This_Balance.add(This_Balance);
//                        sum_Last_Balance = sum_Last_Balance.add(Last_Balance);
//                        dateList.add(p3);
//                    }
//
//                }
//                if (sum_last_K22.floatValue() != 0) {
//                    if (sum_last_K22.floatValue() > 0) {
//                        sum_Rate_K22 = (sum_K22.subtract(sum_last_K22)).divide(sum_last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    } else {
//                        if (sum_last_K22.floatValue() != 0) {
//                            sum_Rate_K22 = (sum_last_K22.subtract(sum_K22)).divide(sum_last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                        }
//                    }
//                }
//                if (sum_last_K30.floatValue() > 0) {
//                    sum_Rate_K30 = (sum_K30.subtract(sum_last_K30)).divide(sum_last_K30, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (sum_last_K30.floatValue() != 0) {
//                        sum_Rate_K30 = (sum_last_K30.subtract(sum_K30)).divide(sum_last_K30, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (sum_last_K36.floatValue() > 0) {
//                    sum_Rate_K36 = (sum_K36.subtract(sum_last_K36)).divide(sum_last_K36, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (sum_last_K36.floatValue() != 0) {
//                        sum_Rate_K36 = (sum_last_K36.subtract(sum_K36)).divide(sum_last_K36, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (sum_last_K1.floatValue() > 0) {
//                    sum_Rate_K1 = (sum_K1.subtract(sum_last_K1)).divide(sum_last_K1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (sum_last_K1.floatValue() != 0) {
//                        sum_Rate_K1 = (sum_last_K1.subtract(sum_K1)).divide(sum_last_K1, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (sum_last_K19.floatValue() > 0) {
//                    sum_Rate_K19 = (sum_K19.subtract(sum_last_K19)).divide(sum_last_K19, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                } else {
//                    if (sum_last_K19.floatValue() != 0) {
//                        sum_Rate_K19 = (sum_last_K19.subtract(sum_K19)).divide(sum_last_K19, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                    }
//                }
//                if (sum_K22.floatValue() != 0) {
//                    sum_This_Balance = sum_K30.divide(sum_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                }
//                if (sum_last_K22.floatValue() != 0) {
//                    sum_Last_Balance = sum_last_K30.divide(sum_last_K22, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                }
//                if (sum_Last_Balance.floatValue() != 0) {
//                    sum_Grad_Balance = (sum_This_Balance.subtract(sum_Last_Balance)).divide(sum_Last_Balance, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
//                }
//                PageData p3 = new PageData();
//                p3.put("orgName", list.get(0).getString("name") + "板块合计");
//                p3.put("K1", sum_K1.toPlainString());
//                p3.put("last_K1", sum_last_K1.toPlainString());
//                p3.put("Rate_K1", sum_Rate_K1.setScale(2).toPlainString());
//                p3.put("Grad_K1", sum_K1.subtract(sum_last_K1));
//
//                p3.put("K19", sum_K19.toPlainString());
//                p3.put("last_K19", sum_last_K19.toPlainString());
//                p3.put("Rate_K19", sum_Rate_K19.setScale(2).toPlainString());
//                p3.put("Grad_K19", sum_K19.subtract(sum_last_K19));
//
//                p3.put("K22", sum_K22.toPlainString());
//                p3.put("last_K22", sum_last_K22.toPlainString());
//                p3.put("Rate_K22", sum_Rate_K22.setScale(2).toPlainString());
//
//                p3.put("K30", sum_K30.toPlainString());
//                p3.put("last_K30", sum_last_K30.toPlainString());
//                p3.put("Rate_K30", sum_Rate_K30.setScale(2).toPlainString());
//
//                p3.put("K36", sum_K36.toPlainString());
//                p3.put("last_K36", sum_last_K36.toPlainString());
//                p3.put("Rate_K36", sum_Rate_K36.setScale(2).toPlainString());
//
//                p3.put("This_Balance", sum_This_Balance.toPlainString());
//                p3.put("Last_Balance", sum_Last_Balance.toPlainString());
//                p3.put("Grad_Balance", sum_Grad_Balance.toPlainString());
//                dateList.add(p3);
//            }
//
//
//            ListResult Result = new ListResult(CommonCode.SUCCESS);
//            Result.setList(dateList);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

    /*
//     *快报指标趋势
//     * */
//    public ListResult bulletinIndicators(PageData pd) {
//        try {
//            String year = pd.getString("reportTime").substring(0, 4);
//            String month = pd.getString("reportTime").substring(5, 7);
//
//            String lastyear = String.valueOf(Integer.valueOf(year) - 1);
//            String lastmonth = String.valueOf(Integer.valueOf(month) - 1 < 10 ? "0" + (Integer.valueOf(month) - 1) : (Integer.valueOf(month) - 1));
//            pd.put("year", year);
//            pd.put("month", month);
//            pd.put("lastyear", lastyear);
//            pd.put("lastmonth", lastmonth);
//
//            PageData org = orgzationDao.findbyid(pd.getString("orgId"));
//            String typeCode = org.getString("typeCode");
//
//
//            NewBulletinVO queryParam = new NewBulletinVO();
//            queryParam.setYear(year);
//            queryParam.setMonth(month);
//            queryParam.setOrgId(pd.getString("orgId"));
//            NewBulletin bulletin;
//            NewBulletin lastBulletin;
//            if ("1".equals(typeCode) || "2".equals(typeCode)){
//                bulletin = newBulletinService.getSingleOneByParam(queryParam);
//                queryParam.setYear(lastyear);
//                queryParam.setMonth(month);
//                lastBulletin = newBulletinService.getSingleOneByParam(queryParam);
//            }else {
//                bulletin = newBulletinService.getGroupOneByParam(queryParam);
//                queryParam.setYear(lastyear);
//                queryParam.setMonth(month);
//                lastBulletin = newBulletinService.getGroupOneByParam(queryParam);
//            }
//
//            PageData financeIndicatorsPd = new PageData();
//            financeIndicatorsPd.put("dataSource", "2");
//            financeIndicatorsPd.put("year", year);
//            List<PageData> financeIndicatorsList = financeIndicatorsDao.findByDataSource(financeIndicatorsPd);
//            Map<String, PageData> financeIndicatorsMap = financeIndicatorsList.stream()
//                    .collect(Collectors.toMap(indicators -> indicators.getString("id"), indicators -> indicators));
//
//            List<PageData> list = indicatorsValueDao.getBulletinIndicators(pd);
//
//            if (CollectionUtil.isNotEmpty(list)){
//                for(PageData value : list){
//                    String indicatorsId = value.getString("indicayorsId");
//                    if (financeIndicatorsMap.containsKey(indicatorsId)){
//                        String columnName = financeIndicatorsMap.get(indicatorsId).getString("fieldName");
//                        if (bulletin != null && CollectionUtil.isNotEmpty(bulletin.getBulletinValues())){
//                            for(BulletinValue bulletinValue : bulletin.getBulletinValues()){
//                                if (columnName.equals(bulletinValue.getColumnName())){
//                                    value.put("sumValue", bulletinValue.getYearAmount());
//                                }
//                            }
//                        }
//
//                        if (lastBulletin != null && CollectionUtil.isNotEmpty(lastBulletin.getBulletinValues())){
//                            for(BulletinValue bulletinValue : lastBulletin.getBulletinValues()){
//                                if (columnName.equals(bulletinValue.getColumnName())){
//                                    value.put("last_sumValue", bulletinValue.getYearAmount());
//                                }
//                            }
//                        }
//                    }
//                    BigDecimal sumValue = BigDecimalUtil.toBigdecimal(value.getString("sumValue"));
//                    BigDecimal lastSumValue = BigDecimalUtil.toBigdecimal(value.getString("last_sumValue"));
//
//                    value.put("yearRate", BigDecimalUtil.divide(BigDecimalUtil.subtract(sumValue, lastSumValue),
//                            lastSumValue, 2, BigDecimal.ROUND_HALF_UP, 100));
//                }
//            }
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *预算-快报-鉴证表总体完成情况分析
//     * */
//    public ListResult getBudgetAndJZComplete(PageData pd) {
//        try {
//            String year = pd.getString("reportTime").substring(0, 4);
//
//            pd.put("year", year);
//            List<PageData> list = indicatorsValueDao.getBudgetAndJZComplete(pd);
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *快报指标趋势
//     * */
//    public ObjResult bulletinIndustryBenchmark(PageData pd) {
//        ObjResult objResult;
//        try {
//            String year = pd.getString("reportTime").substring(0, 4);
//            String month = pd.getString("reportTime").substring(5, 7);
//
//            pd.put("year", year);
//            pd.put("month", month);
//            Enterprise enterprise = enterpriseService.findByOrg(pd.getString("orgId"));
//            List<PageData> list = new ArrayList<>();
//            if (enterprise != null) {
//                pd.put("industry", enterprise.getIndustry());
//                pd.put("industryName", baseInfoDao.findbycode(enterprise.getIndustry()).getString("name"));
//                PageData scaleOperation = baseInfoDao.findbycode(enterprise.getScaleOperation());
//                if ("汇总".equals(scaleOperation.getString("name"))) {
//                    pd.put("industryScale", "全行业");
//                } else {
//                    pd.put("industryScale", scaleOperation.getString("name").trim());
//                }
//                list = indicatorsValueDao.bulletinIndustryBenchmark(pd);
//            } else {
//                objResult = new ObjResult(CommonCode.FAIL);
//                objResult.setMessage("请先完善企业基本信息");
//                return objResult;
//            }
//            if (list.size() > 0) {
//                for (PageData p : list) {
//                    BigDecimal bulletinValue = new BigDecimal(p.getString("bulletinValue") == null ? "0" : p.getString("bulletinValue"));
//                    BigDecimal excellentNumber = new BigDecimal(p.getString("excellentNumber") == null ? "0" : p.getString("excellentNumber"));
//                    BigDecimal goodNumber = new BigDecimal(p.getString("goodNumber") == null ? "0" : p.getString("goodNumber"));
//                    BigDecimal lowNumber = new BigDecimal(p.getString("lowNumber") == null ? "0" : p.getString("lowNumber"));
//                    BigDecimal badNumber = new BigDecimal(p.getString("badNumber") == null ? "0" : p.getString("badNumber"));
//                    if (lowNumber.compareTo(badNumber) == 1) {
////                        对比数据 赋值对标结果
//                        if (goodNumber.compareTo(BigDecimal.ZERO) != 0 && excellentNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "[" + goodNumber + "," + excellentNumber + ")")) {
//                            p.put("compareResult", "良好");
//                        } else if (badNumber.compareTo(BigDecimal.ZERO) != 0 && lowNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "(" + badNumber + "," + lowNumber + "]")) {
//                            p.put("compareResult", "较低");
//                        } else if (badNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "(-∞," + badNumber + "]")) {
//                            p.put("compareResult", "较差");
//                        } else if (goodNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "[" + goodNumber + ",+∞)")) {
//                            p.put("compareResult", "优秀");
//                        } else {
//                            p.put("compareResult", "一般");
//                        }
//
//                    } else {
//                        if (goodNumber.compareTo(BigDecimal.ZERO) != 0 && excellentNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "(" + excellentNumber + "," + goodNumber + "]")) {
//                            p.put("compareResult", "良好");
//                        } else if (badNumber.compareTo(BigDecimal.ZERO) != 0 && lowNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "[" + lowNumber + "," + badNumber + ")")) {
//                            p.put("compareResult", "较低");
//                        } else if (badNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "[" + badNumber + ",+∞)")) {
//                            p.put("compareResult", "较差");
//                        } else if (goodNumber.compareTo(BigDecimal.ZERO) != 0 && IntervalUtil.isInTheInterval(String.valueOf(bulletinValue), "(-∞," + goodNumber + "]")) {
//                            p.put("compareResult", "优秀");
//                        } else {
//                            p.put("compareResult", "一般");
//                        }
//                    }
//                }
//                pd.put("dateList", list);
//            }
//            objResult = new ObjResult(CommonCode.SUCCESS);
//            objResult.setPageData(pd);
//            return objResult;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ObjResult(CommonCode.ERROR);
//        }
//    }

//    /*
//     *快报指标预算完成情况
//     * */
//    public ListResult getBudgetComplete(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            if (!indicators.getString("fieldName").contains("SUM_")) {
//                pd.put("isMonth", 1);//需累计的指标
//            }
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//
//            String year = pd.getString("year");
//            if (StringUtil.isBlank(year)){
//                year = DateUtil.format(DateUtil.now(), DateUtil.PATTERN_MONTH);
//                pd.put("year", year);
//            }
//
//            pd.put("tableTypeCode", "0");
//            //获取已填的月份
//            List<Integer> filledMonth = newBulletinService.findFillMonths((List<String>)pd.get("units"), pd.getString("orgId"), year, "0");
//            List<PageData> list = indicatorsValueDao.getBudgetComplete(pd);
//            int m = 1;
//            for (PageData p : list) {
//                p.put("fmonth", formatDigit(p.getString("month")) + "月");
//                boolean isFilled = false;
//                if (pd.getString("year").equals(year)) {
//                    for (int months : filledMonth) {
//                        if (m == months) {
//                            isFilled = true;
//                        }
//                    }
//                    if (!isFilled) {
//                        p.put("thisSumValue", "");
//                        p.put("in_de_Rate", "");
//                        p.put("Complete_Rate", "");
//                        p.put("thisValue", "");
//                    }
//                }
//                m++;
//            }
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *快报指标预算完成情况预警分析
//     * */
//    public ListResult getBudgetWarning(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            String indicatorsName = indicators.getString("name");
//            PageData sumIndicators = financeIndicatorsDao.findIndicatorsByName("本年累计" + indicatorsName);
//            if (sumIndicators == null){
//                sumIndicators = financeIndicatorsDao.findIndicatorsByName(indicatorsName + "（本年累计）");
//            }
//
//            if (sumIndicators == null){
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的快报指标，请联系管理员配置！");
//                return Result;
//            }
//            pd.put("indicatorsId", sumIndicators.getString("id"));
//
//            if (sumIndicators.getString("fieldName").contains("SUM_")) {
//                pd.put("isMonth", 1);
//            }
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//            String orgId = TokenUtil.getTokenOrgId();
//            if (!orgzationService.checkGzwName(orgId)){
//                pd.put("orgId", orgId);
//            }
//            List<PageData> list = indicatorsValueDao.getBudgetWarning(pd);
//
//            boolean isYyzcb = false;
//            if(indicatorsName.contains("营业总成本")){
//                isYyzcb = true;
//            }
//
//            for (PageData p : list) {
//                BigDecimal Rate1 = new BigDecimal(p.getString("Rate1") == null ? "0" : p.getString("Rate1"));
//                BigDecimal Rate2 = new BigDecimal(p.getString("Rate2") == null ? "0" : p.getString("Rate2"));
//                BigDecimal Rate3 = new BigDecimal(p.getString("Rate3") == null ? "0" : p.getString("Rate3"));
//                if (p.getString("gsaliaryValue")!=null&&Float.valueOf(p.getString("gsaliaryValue")) >= 0) {
//                    if (isYyzcb){
//                        if (Tools.notEmpty(p.getString("Rate1")) && Rate1.compareTo(BigDecimal.valueOf(130)) == 1) {
//                            p.put("color1", 1);
//                        }
//                        if (Tools.notEmpty(p.getString("Rate2")) && Rate2.compareTo(BigDecimal.valueOf(130)) == 1) {
//                            p.put("color2", 1);
//                        }
//                        if (Tools.notEmpty(p.getString("Rate3")) && Rate3.compareTo(BigDecimal.valueOf(130)) == 1) {
//                            p.put("color3", 1);
//                        }
//                    }else {
//                        if (Tools.notEmpty(p.getString("Rate1")) && Rate1.compareTo(BigDecimal.valueOf(70)) == -1) {
//                            p.put("color1", 1);
//                        }
//                        if (Tools.notEmpty(p.getString("Rate2")) && Rate2.compareTo(BigDecimal.valueOf(70)) == -1) {
//                            p.put("color2", 1);
//                        }
//                        if (Tools.notEmpty(p.getString("Rate3")) && Rate3.compareTo(BigDecimal.valueOf(70)) == -1) {
//                            p.put("color3", 1);
//                        }
//                    }
//                }
//            }
//            list.sort((v1, v2) ->
//                    {
//                        String value1 = v1.getString("gsaliaryValue");
//                        String value2 = v2.getString("gsaliaryValue");
//                        if (StringUtil.isBlank(value1) && StringUtil.isBlank(value2)){
//                            return 0;
//                        }
//
//                        if (StringUtil.isBlank(value1)){
//                            return 1;
//                        }
//
//                        if (StringUtil.isBlank(value2)){
//                            return -1;
//                        }
//                        return BigDecimalUtil.toBigdecimal(value2)
//                                .compareTo(BigDecimalUtil.toBigdecimal(value1));
//                    }
//
//            );
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    public ListResult SolvencyDate(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            List<PageData> pdList = new ArrayList<>();
//            BigDecimal startNum = new BigDecimal("0");
//            BigDecimal endNum = new BigDecimal("0");
//            String[] codeList = {"G1", "G4"};
//            pd.put("year", pd.getString("reportTime").substring(0, 4));
//            pd.put("month", pd.getString("reportTime").substring(5, 7));
//            BigDecimal standardNum;
//            BigDecimal warningNum;
//            for (String code : codeList) {
//                PageData p = new PageData();
//                pd.put("code", code);
//                PageData Indicators = financeIndicatorsDao.findByCode(code);
//                List<PageData> stdvalueList = indicatorsStdvalueDao.findbyOrgAndYear(pd);
//                if (stdvalueList.size() == 0) {
//                    standardNum = new BigDecimal("0");
//                    warningNum = new BigDecimal("100");
//                } else {
//                    standardNum = new BigDecimal(stdvalueList.get(0).getString("standardValues"));
//                    warningNum = new BigDecimal(stdvalueList.get(1).getString("standardValues"));
//                }
//
//                BigDecimal realValue = new BigDecimal(indicatorsValueDao.findMonthValue(pd).getString("realValue")).setScale(2, BigDecimal.ROUND_HALF_UP);
//                startNum = standardNum.subtract(warningNum.subtract(standardNum));
//                endNum = warningNum.add(warningNum.subtract(standardNum));
//                p.put("name", Indicators.getString("name"));
//
//                if (realValue.compareTo(startNum) == -1 && "1".equals(Indicators.getString("greatFloating"))) {
//                    p.put("startNum", realValue.intValue());
//                } else {
//                    p.put("startNum", startNum.intValue());
//                }
//                p.put("standardNum", standardNum.intValue());
//                p.put("warningNum", warningNum.intValue());
//                p.put("endNum", endNum.intValue());
//                p.put("realValue", realValue.intValue());
//                p.put("indicatorsId", Indicators.getString("id"));
//                pdList.add(p);
//            }
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(pdList);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *1-x月快报指标预算完成情况
//     * */
//    public ListResult getBudgetWarningMonth(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            String indicatorsName = indicators.getString("name");
//            PageData sumIndicators = financeIndicatorsDao.findIndicatorsByName("本年累计" + indicatorsName);
//            if (sumIndicators == null){
//                sumIndicators = financeIndicatorsDao.findIndicatorsByName(indicatorsName + "（本年累计）");
//            }
//
//            if (sumIndicators == null){
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的快报指标，请联系管理员配置！");
//                return Result;
//            }
//            pd.put("indicatorsId", sumIndicators.getString("id"));
//
//            if (sumIndicators.getString("fieldName").contains("SUM_")) {
//                pd.put("isMonth", 1);
//            }
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));//找到同名预算指标信息
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));//预算指标id
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//
//            String orgId = TokenUtil.getTokenOrgId();
//            if (!orgzationService.checkGzwName(orgId)){
//                pd.put("orgId", orgId);
//            }
//            List<PageData> list = indicatorsValueDao.getBudgetWarningMonth(pd);
//            if (Integer.parseInt(pd.getString("month")) > 9) {//10月之后预警
//                for (PageData p : list) {
//                    if (StringUtil.isNotBlank(p.getString("gsaliaryValue")) && Float.valueOf(StringUtil.cleanChars(p.getString("gsaliaryValue"))) >= 0) {//全年预算数不为负数
//                        if (Tools.notEmpty(p.getString("Rate")) && BigDecimal.valueOf(Double.parseDouble(StringUtil.cleanChars(p.getString("Rate")))).compareTo(BigDecimal.valueOf(0.7)) == -1) {
//                            p.put("color", 1);
//                        }
//                    }
//                }
//            }
//
//            list.sort((v1, v2) ->
//                    {
//                        String value1 = v1.getString("gsaliary");
//                        String value2 = v2.getString("gsaliary");
//                        if (StringUtil.isBlank(value1) && StringUtil.isBlank(value2)){
//                            return 0;
//                        }
//
//                        if (StringUtil.isBlank(value1)){
//                            return 1;
//                        }
//
//                        if (StringUtil.isBlank(value2)){
//                            return -1;
//                        }
//                        return BigDecimalUtil.toBigdecimal(value2)
//                                .compareTo(BigDecimalUtil.toBigdecimal(value1));
//                    }
//
//            );
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *利润负数、现金流量负数
//     * */
//    public ListResult getDeficitWarning(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            //找到同名预算指标信息
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));
//            if (budget != null) {
//                //预算指标id
//                pd.put("ysIndicator", budget.getString("id"));
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//            PageData org = orgzationDao.findbyid(TokenUtil.getTokenOrgId());
//            pd.put("orgCode", org.getString("orgCode"));
//            List<PageData> list = indicatorsValueDao.getDeficitWarning(pd);
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *仪表盘
//     * */
//    public ListResult getManagePanel(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            List<String> indicatorsId = new ArrayList<>();
//            pd.put("year", pd.getString("reportTime").substring(0, 4));
//            pd.put("month", pd.getString("reportTime").substring(5, 7));
//            indicatorsId.add("775f145a045745ee881e79c8a2489669");//营业总收入K1
//            indicatorsId.add("265d1e431023408f92dcc6a06354bb56");//利润总额K19
//            for (int i = 1; i <= indicatorsId.size(); i++) {
//                PageData indicators = financeIndicatorsDao.findbyid(indicatorsId.get(i - 1));
//                pd.put("indicatorsId" + i, indicatorsId.get(i - 1));
//                PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));//找到同名预算指标信息
//                if (budget != null) {
//                    pd.put("ysIndicator" + i, budget.getString("id"));//预算指标id
//                } else {
//                    Result = new ListResult<>(CommonCode.ERROR);
//                    Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                    return Result;
//                }
//            }
//
//            List<PageData> list = indicatorsValueDao.getManagePanel(pd);
//            if (list.size() > 0) {
//                for (PageData p : list) {
//                    double real = Double.parseDouble(p.getString("realValue"));
//                    p.put("startNum", 0);
//                    p.put("standardNum", 50);
//                    p.put("warningNum", 100);
//                    p.put("endNum", 150);
//                    if (real < 0) {
//                        p.put("startNum", real);
//                    }
//                    if (real > 150) {
//                        p.put("endNum", real);
//                    }
//                }
//            }
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *本年预算快报累计数柱状图
//     * */
//    public ListResult getBudgetBarchart(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));//找到同名预算指标信息
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));//预算指标id
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//            int month = Integer.parseInt(pd.getString("month"));//月份列表
//            if (month > 1) {
//                List<Integer> monthList = new ArrayList<>();
//                for (int i = 2; i <= month; i++) {
//                    monthList.add(i);
//                }
//                pd.put("monthList", monthList);
//            }
//            List<PageData> list = indicatorsValueDao.getBudgetBarchart(pd);
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *预算快报水桶图
//     * */
//    public ListResult getBudgetBucket(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));//找到同名预算指标信息
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));//预算指标id
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//            List<PageData> list = indicatorsValueDao.getBudgetBucket(pd);
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *本年预算快报每月数折线图
//     * */
//    public ListResult getBudgetLinechart(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));//找到同名预算指标信息
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));//预算指标id
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//            int month = Integer.parseInt(pd.getString("month").trim());//月份列表
//            if (month > 1) {
//                List<Integer> monthList = new ArrayList<>();
//                for (int i = 2; i <= month; i++) {
//                    monthList.add(i);
//                }
//                pd.put("monthList", monthList);
//            }
//            List<PageData> list = indicatorsValueDao.getBudgetLinechart(pd);
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *本年与上年同期预算快报累计数柱状图
//     * */
//    public ListResult getBudgetBarchartWithLastyear(PageData pd) {
//        ListResult<PageData> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));//找到同名预算指标信息
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));//预算指标id
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//            Calendar cal = Calendar.getInstance();
//            int month = cal.get(Calendar.MONTH);
//            int year = cal.get(Calendar.YEAR);
//            List<Integer> monthList = new ArrayList<>();//到当前月前一月
//            if (pd.getString("year").equals(year + "")) {
//                for (int i = 2; i <= month; i++) {
//                    monthList.add(i);
//                }
//            } else {
//                for (int i = 2; i <= 12; i++) {
//                    monthList.add(i);
//                }
//            }
//            pd.put("monthList", monthList);
//            List<PageData> list = indicatorsValueDao.getBudgetBarchartWithLastyear(pd);
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

//    /*
//     *本年、上年、前年预算数与完成数柱状图和折线图，有上年同期柱状图
//     * */
//    public ListResult getBudgetChart(PageData pd) {
//        ListResult<List<PageData>> Result;
//        try {
//            PageData indicators = financeIndicatorsDao.findbyid(pd.getString("indicatorsId"));
//            if (indicators.getString("fieldName").startsWith("SUM")) {//非可累计指标
//                Calendar cal = Calendar.getInstance();
//                int m = cal.get(Calendar.MONTH);
//                pd.put("month", m);//今年取的月份
//                pd.put("monthBefore", "12");//往年取的月份
//            } else {
//                pd.put("month", "00");//今年取的月份
//                pd.put("monthBefore", "00");//往年取的月份
//            }
//            PageData budget = financeIndicatorsDao.findBudgetbByName(indicators.getString("name"));//找到同名预算指标信息
//            if (budget != null) {
//                pd.put("ysIndicator", budget.getString("id"));//预算指标id
//            } else {
//                Result = new ListResult<>(CommonCode.ERROR);
//                Result.setMessage("未配置对应的预算指标，请联系管理员配置！");
//                return Result;
//            }
//            List<List<PageData>> list = new ArrayList<>();
//            list.add(0, indicatorsValueDao.getBudgetChartWithThreeYear(pd));
//            list.add(1, indicatorsValueDao.getBudgetChartWithThreeYear(pd));
//            List<PageData> threeYearList = indicatorsValueDao.getBudgetBarchartWithThreeYear(pd);
//            list.add(2, threeYearList);
//            Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

    private List<PageData> getMainIndicatorsIds() throws Exception{
        PageData pd = new PageData();
        String[] codeList = {"K22","K30","K36","KLJ1","KLJ19", "Y22","Y30","Y36","Y1", "Y19","KLAST22","KLAST30","KLAST36","KLASTLJ1","KLASTLJ19"};
        pd.put("codeList",codeList);
        List<PageData> list = financeIndicatorsDao.findByCodes(pd);
        return list;
    }


    private void sendPdSet(PageData pd, PageData sendPd, List<IndicatorsValue> sendIndicatorsValues,
                           List<String> kbIndicatorsCodes,List<String> kbLastIndicatorsCodes,List<String> ysIndicatorsCodes, Map<String, String>  codeIdMap){
        Map<String, IndicatorsValue> sendIndicatorsValueMap = sendIndicatorsValues.stream()
                .collect(Collectors.toMap(indicatorsValue -> indicatorsValue.getFyear() + "-" + indicatorsValue.getIndicatorsId(),
                        indicatorsValue -> indicatorsValue, (k1, k2) -> k1));
        List<String> kbKey = new ArrayList<>(Arrays.asList("ZCZE","FZZE","JZCZE","YYSR","LRZE"));
        List<String> lastKbKey = new ArrayList<>(Arrays.asList("lastZCZE","lastFZZE","lastJZCZE","lastYYSR","lastLRZE"));
        List<String> ysKey = new ArrayList<>(Arrays.asList("ysZCZE","ysFZZE","ysJZCZE","ysYYSR", "ysLRZE"));
        Integer year = pd.getInteger("year");
        Integer lastYear = pd.getInteger("lastYear");
        for (int i = 0; i < kbIndicatorsCodes.size(); i++){
            if (sendIndicatorsValueMap.containsKey(year  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i)))){
                sendPd.put(kbKey.get(i), sendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i))).getFvalue());
            }

            if (sendIndicatorsValueMap.containsKey(year  + "-" + codeIdMap.get( kbLastIndicatorsCodes.get(i)))){
                sendPd.put(lastKbKey.get(i), sendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(kbLastIndicatorsCodes.get(i))).getFvalue());
            }

            if (sendIndicatorsValueMap.containsKey(year  + "-" +  codeIdMap.get(ysIndicatorsCodes.get(i)))){
                sendPd.put(ysKey.get(i), sendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(ysIndicatorsCodes.get(i))).getFvalue());
            }
        }
    }

    private void subtractSet(PageData pd, PageData sendPd, PageData subtractPd,
                             List<String> kbIndicatorsCodes,List<String> kbLastIndicatorsCodes, List<String> ysIndicatorsCodes, Map<String, String>  codeIdMap) throws Exception {
        List<IndicatorsValue> subtractIndicatorsValues = indicatorsValueDao.getMainIndicators(subtractPd);
        Map<String, IndicatorsValue> subtractSendIndicatorsValueMap = subtractIndicatorsValues.stream()
                .collect(Collectors.toMap(indicatorsValue -> indicatorsValue.getFyear() + "-" + indicatorsValue.getIndicatorsId(),
                        indicatorsValue -> indicatorsValue, (k1, k2) -> k1));

        List<String> kbKey = new ArrayList<>(Arrays.asList("ZCZE","FZZE","JZCZE","YYSR","LRZE"));
        List<String> lastKbKey = new ArrayList<>(Arrays.asList("lastZCZE","lastFZZE","lastJZCZE","lastYYSR","lastLRZE"));
        List<String> ysKey = new ArrayList<>(Arrays.asList("ysZCZE","ysFZZE","ysJZCZE","ysYYSR", "ysLRZE"));
        Integer year = pd.getInteger("year");
        Integer lastYear = pd.getInteger("lastYear");
        PageData subtractSendPd = new PageData();


        for (int i = 0; i < kbIndicatorsCodes.size(); i++){

            if (subtractSendIndicatorsValueMap.containsKey(year  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i)))){
                subtractSendPd.put(kbKey.get(i), subtractSendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i))).getFvalue());
            }


            if (subtractSendIndicatorsValueMap.containsKey(year  + "-" +  codeIdMap.get(kbLastIndicatorsCodes.get(i)))){
                subtractSendPd.put(lastKbKey.get(i), subtractSendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(kbLastIndicatorsCodes.get(i))).getFvalue());
            }

            if (subtractSendIndicatorsValueMap.containsKey(year  + "-" +  codeIdMap.get(ysIndicatorsCodes.get(i)))){
                subtractSendPd.put(ysKey.get(i), subtractSendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(ysIndicatorsCodes.get(i))).getFvalue());
            }


        }

        // 2020年开始 通商特殊处理
        if (year >= 2020){
            sendPd.put("ZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(BigDecimalUtil.toBigdecimal(sendPd.getString("ZCZE")),
                    BigDecimalUtil.toBigdecimal(subtractSendPd.getString("ZCZE")))));
            sendPd.put("FZZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(BigDecimalUtil.toBigdecimal(sendPd.getString("FZZE")),
                    BigDecimalUtil.toBigdecimal(subtractSendPd.getString("FZZE")))));
            sendPd.put("JZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(BigDecimalUtil.toBigdecimal(sendPd.getString("JZCZE")),
                    BigDecimalUtil.toBigdecimal(subtractSendPd.getString("JZCZE")))));
            sendPd.put("YYSR", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(BigDecimalUtil.toBigdecimal(sendPd.getString("YYSR")),
                    BigDecimalUtil.toBigdecimal(subtractSendPd.getString("YYSR")))));
            sendPd.put("LRZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(BigDecimalUtil.toBigdecimal(sendPd.getString("LRZE")),
                    BigDecimalUtil.toBigdecimal(subtractSendPd.getString("LRZE")))));
        }

        if (lastYear >= 2020){
            sendPd.put("lastZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("lastZCZE")),
                    new BigDecimal(subtractSendPd.getString("lastZCZE")))));
            sendPd.put("lastFZZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("lastFZZE")),
                    new BigDecimal(subtractSendPd.getString("lastFZZE")))));
            sendPd.put("lastJZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("lastJZCZE")),
                    new BigDecimal(subtractSendPd.getString("lastJZCZE")))));
            sendPd.put("lastYYSR", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("lastYYSR")),
                    new BigDecimal(subtractSendPd.getString("lastYYSR")))));
            sendPd.put("lastLRZE", BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("lastLRZE")),
                    new BigDecimal(subtractSendPd.getString("lastLRZE")))));
        }


//        sendPd.put("ysZCZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysZCZE")),
//                new BigDecimal(subtractSendPd.getString("ysZCZE"))).toPlainString());
//        sendPd.put("ysFZZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysFZZE")),
//                new BigDecimal(subtractSendPd.getString("ysFZZE"))).toPlainString());
//        sendPd.put("ysJZCZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysJZCZE")),
//                new BigDecimal(subtractSendPd.getString("ysJZCZE"))).toPlainString());
//        sendPd.put("ysYYSR", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysYYSR")),
//                new BigDecimal(subtractSendPd.getString("ysYYSR"))).toPlainString());
//        sendPd.put("ysLRZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysLRZE")),
//                new BigDecimal(subtractSendPd.getString("ysLRZE"))).toPlainString());


    }


    private void addSet(PageData pd, PageData sendPd, PageData addPd,
                             List<String> kbIndicatorsCodes,List<String> kbLastIndicatorsCodes, List<String> ysIndicatorsCodes, Map<String, String>  codeIdMap) throws Exception {
        List<IndicatorsValue> addIndicatorsValues = indicatorsValueDao.getMainIndicators(addPd);

        Map<String, IndicatorsValue> addSendIndicatorsValueMap = addIndicatorsValues.stream()
                .collect(Collectors.toMap(indicatorsValue -> indicatorsValue.getFyear() + "-" + indicatorsValue.getIndicatorsId(),
                        indicatorsValue -> indicatorsValue, (k1, k2) -> k1));

        List<String> kbKey = new ArrayList<>(Arrays.asList("ZCZE","FZZE","JZCZE","YYSR","LRZE"));
        List<String> lastKbKey = new ArrayList<>(Arrays.asList("lastZCZE","lastFZZE","lastJZCZE","lastYYSR","lastLRZE"));
        List<String> ysKey = new ArrayList<>(Arrays.asList("ysZCZE","ysFZZE","ysJZCZE","ysYYSR", "ysLRZE"));
        Integer year = pd.getInteger("year");
        Integer lastYear = pd.getInteger("lastYear");
        PageData addSendPd = new PageData();


        for (int i = 0; i < kbIndicatorsCodes.size(); i++){
            if (addSendIndicatorsValueMap.containsKey(year  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i)))){
                addSendPd.put(kbKey.get(i), addSendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i))).getFvalue());
            }

            if (addSendIndicatorsValueMap.containsKey(lastYear  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i)))){
                addSendPd.put(lastKbKey.get(i), addSendIndicatorsValueMap.get(lastYear  + "-" +  codeIdMap.get(kbIndicatorsCodes.get(i))).getFvalue());
            }

            if (addSendIndicatorsValueMap.containsKey(year  + "-" +  codeIdMap.get(ysIndicatorsCodes.get(i)))){
                addSendPd.put(ysKey.get(i), addSendIndicatorsValueMap.get(year  + "-" +  codeIdMap.get(ysIndicatorsCodes.get(i))).getFvalue());
            }
        }

        // 2020年开始 通商特殊处理
        if (year >= 2020){
            sendPd.put("ZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(BigDecimalUtil.toBigdecimal(sendPd.getString("ZCZE")),
                    BigDecimalUtil.toBigdecimal(addSendPd.getString("ZCZE")))));
            sendPd.put("FZZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(BigDecimalUtil.toBigdecimal(sendPd.getString("FZZE")),
                    BigDecimalUtil.toBigdecimal(addSendPd.getString("FZZE")))));
            sendPd.put("JZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(BigDecimalUtil.toBigdecimal(sendPd.getString("JZCZE")),
                    BigDecimalUtil.toBigdecimal(addSendPd.getString("JZCZE")))));
            sendPd.put("YYSR", BigDecimalUtil.toPlanString(BigDecimalUtil.add(BigDecimalUtil.toBigdecimal(sendPd.getString("YYSR")),
                    BigDecimalUtil.toBigdecimal(addSendPd.getString("YYSR")))));
            sendPd.put("LRZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(BigDecimalUtil.toBigdecimal(sendPd.getString("LRZE")),
                    BigDecimalUtil.toBigdecimal(addSendPd.getString("LRZE")))));
        }

        if (lastYear >= 2020){
            sendPd.put("lastZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(new BigDecimal(sendPd.getString("lastZCZE")),
                    new BigDecimal(addSendPd.getString("lastZCZE")))));
            sendPd.put("lastFZZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(new BigDecimal(sendPd.getString("lastFZZE")),
                    new BigDecimal(addSendPd.getString("lastFZZE")))));
            sendPd.put("lastJZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(new BigDecimal(sendPd.getString("lastJZCZE")),
                    new BigDecimal(addSendPd.getString("lastJZCZE")))));
            sendPd.put("lastYYSR", BigDecimalUtil.toPlanString(BigDecimalUtil.add(new BigDecimal(sendPd.getString("lastYYSR")),
                    new BigDecimal(addSendPd.getString("lastYYSR")))));
            sendPd.put("lastLRZE", BigDecimalUtil.toPlanString(BigDecimalUtil.add(new BigDecimal(sendPd.getString("lastLRZE")),
                    new BigDecimal(addSendPd.getString("lastLRZE")))));
        }


//        sendPd.put("ysZCZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysZCZE")),
//                new BigDecimal(subtractSendPd.getString("ysZCZE"))).toPlainString());
//        sendPd.put("ysFZZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysFZZE")),
//                new BigDecimal(subtractSendPd.getString("ysFZZE"))).toPlainString());
//        sendPd.put("ysJZCZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysJZCZE")),
//                new BigDecimal(subtractSendPd.getString("ysJZCZE"))).toPlainString());
//        sendPd.put("ysYYSR", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysYYSR")),
//                new BigDecimal(subtractSendPd.getString("ysYYSR"))).toPlainString());
//        sendPd.put("ysLRZE", BigDecimalUtil.subtract(new BigDecimal(sendPd.getString("ysLRZE")),
//                new BigDecimal(subtractSendPd.getString("ysLRZE"))).toPlainString());


    }

    private void rateSet(PageData sendPd){
        sendPd.put("ZCZERate", getRate(BigDecimalUtil.toBigdecimal(sendPd.getString("ZCZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("lastZCZE") )));
        sendPd.put("FZZERate", getRate(BigDecimalUtil.toBigdecimal(sendPd.getString("FZZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("lastFZZE"))));
        sendPd.put("JZCZERate", getRate(BigDecimalUtil.toBigdecimal(sendPd.getString("JZCZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("lastJZCZE"))));
        sendPd.put("YYSRRate", getRate(BigDecimalUtil.toBigdecimal(sendPd.getString("YYSR")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("lastYYSR"))));
        sendPd.put("LRZERate", getRate(BigDecimalUtil.toBigdecimal(sendPd.getString("LRZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("lastLRZE"))));


        sendPd.put("ZCZECompleteRate", getCompleteRate(BigDecimalUtil.toBigdecimal(sendPd.getString("ZCZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("ysZCZE"))));
        sendPd.put("FZZECompleteRate", getCompleteRate(BigDecimalUtil.toBigdecimal(sendPd.getString("FZZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("ysFZZE"))));
        sendPd.put("JZCZECompleteRate", getCompleteRate(BigDecimalUtil.toBigdecimal(sendPd.getString("JZCZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("ysJZCZE"))));
        sendPd.put("YYSRCompleteRate", getCompleteRate(BigDecimalUtil.toBigdecimal(sendPd.getString("YYSR")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("ysYYSR"))));
        sendPd.put("LRZECompleteRate", getCompleteRate(BigDecimalUtil.toBigdecimal(sendPd.getString("LRZE")),
                BigDecimalUtil.toBigdecimal(sendPd.getString("ysLRZE"))));

    }

    private void valueSet(PageData sendPd){
        sendPd.put("ZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.divide(BigDecimalUtil.toBigdecimal(sendPd.getString("ZCZE")),
                new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP)));
        sendPd.put("FZZE", BigDecimalUtil.toPlanString(BigDecimalUtil.divide(BigDecimalUtil.toBigdecimal(sendPd.getString("FZZE")),
                new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP)));
        sendPd.put("JZCZE", BigDecimalUtil.toPlanString(BigDecimalUtil.divide(BigDecimalUtil.toBigdecimal(sendPd.getString("JZCZE")),
                new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP)));
        sendPd.put("YYSR", BigDecimalUtil.toPlanString(BigDecimalUtil.divide(BigDecimalUtil.toBigdecimal(sendPd.getString("YYSR")),
                new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP)));
        sendPd.put("LRZE", BigDecimalUtil.toPlanString(BigDecimalUtil.divide(BigDecimalUtil.toBigdecimal(sendPd.getString("LRZE")),
                new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP)));
    }

    private String getRate(BigDecimal bigDecimal, BigDecimal last){
        if (last == null){
            return "-";
        }

        if (last.compareTo(new BigDecimal(0)) == -1){
            return BigDecimalUtil.subtract(new BigDecimal(100),
                    BigDecimalUtil.divide(bigDecimal, last, 2,
                            BigDecimal.ROUND_HALF_UP, 100)).toPlainString();
        }

        if (last.compareTo(new BigDecimal(0)) == 0){
            return "-";
        }
        return BigDecimalUtil.subtract(BigDecimalUtil.divide(bigDecimal, last, 2,
                        BigDecimal.ROUND_HALF_UP, 100), new BigDecimal(100)).toPlainString();
    }

    private String getCompleteRate(BigDecimal bigDecimal, BigDecimal ys){
        if (ys == null){
            return "-";
        }

        if (ys.compareTo(new BigDecimal(0)) == -1){
            return BigDecimalUtil.subtract(new BigDecimal(200),
                    BigDecimalUtil.divide(bigDecimal, ys, 2,
                            BigDecimal.ROUND_HALF_UP, 100)).toPlainString();
        }

        if (ys.compareTo(new BigDecimal(0)) == 0){
            return "-";
        }
        return BigDecimalUtil.divide(bigDecimal, ys, 2,
                BigDecimal.ROUND_HALF_UP, 100).toPlainString();
    }

//    /*
//     *快报指标趋势
//     * */
//    public ListResult balanceRateRank(PageData pd) {
//        try {
//            String year = pd.getString("reportTime").substring(0, 4);
//            String month = pd.getString("reportTime").substring(5, 7);
//
//            String[][] codeList = {{"K22"},{"K36"},{"KLJ1"},{"KLJ19"},{"K30"}};
//            pd.put("year", year);
//            pd.put("month", month);
//            List<PageData> orgList = new ArrayList<>();
//            boolean isGzw = false;
//            if (Tools.isEmpty(pd.getString("orgId"))) {
//                pd.put("orgId", TokenUtil.getTokenOrgId());
//            }else {
//                PageData org = orgzationDao.findbyid(pd.getString("orgId"));
//                if ("1".equals(org.getString("type"))){
//                    isGzw = true;
//                    String dateStr = year + StringPool.DASH + month;
//                    if (orgService.getDTFlag(dateStr)){
//                        orgList = orgzationDao.findGZWUnitsFilterDT();
//                    }else {
//                        orgList = orgzationDao.findGZWUnits();
//                    }
//                }else {
//                    orgList = orgzationDao.findchildbyid(pd.getString("orgId"));
//                    List<PageData> copy = new ArrayList();
//                    copy.addAll(orgList);
//                    for (PageData orgpd:copy){
//                        if (orgpd.getString("id").equals(pd.getString("orgId"))){
//                            orgList.remove(orgpd);
//                        }
//                    }
//                }
//            }
//            pd.put("list", orgList);
//            List<PageData> list = new ArrayList<>();
//            boolean isZCFZL = false;
//            switch (pd.getString("type")){
//                case "ZCZE":
//                    pd.put("codeList",codeList[0]);
//                    break;
//                case "JZC":
//                    pd.put("codeList",codeList[1]);
//                    break;
//                case "YS":
////                    pd.put("isAdd",1);
//                    pd.put("codeList",codeList[2]);
//                    break;
//                case "LRZE":
////                    pd.put("isAdd",1);
//                    pd.put("codeList",codeList[3]);
//                    break;
//                case "FZZE":
//                    pd.put("codeList",codeList[4]);
//                    break;
//                case "ZCFZL":
//                    isZCFZL = true;
//                    break;
//                default:
//                    break;
//            }
//            if (isZCFZL){
//                list = getZCFZLList(pd, isGzw);
//            }else {
//                list = indicatorsValueDao.balanceRateRank(pd);
//            }
//
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            return Result;
//        } catch (Exception e) {
//            LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }

    private List<PageData> getZCFZLList(PageData pd, boolean isGzw){
        List<Tree> treeList = getIndustryDebt(pd).getList();
        List<PageData> values = new ArrayList<>();
        List<PageData> results = new ArrayList<>();

        if (CollectionUtil.isEmpty(treeList)){
            return results;
        }
        if (isGzw){
            for (Tree tree : treeList){
                values.add(tree.getPageData());
            }
        }else {
            for (Tree tree : treeToList(treeList)){
                values.add(tree.getPageData());
            }
        }
        values.remove(values.size() - 1);
        values.sort((v1, v2) -> {
            BigDecimal v1Rate = new BigDecimal(0);
            BigDecimal v2Rate = new BigDecimal(0);
            if (StringUtil.isNotBlank(v1.getString("book_asset_liability"))){
                v1Rate = BigDecimalUtil.toBigdecimal(v1.getString("book_asset_liability"));
            }
            if (StringUtil.isNotBlank(v2.getString("book_asset_liability"))){
                v2Rate = BigDecimalUtil.toBigdecimal(v2.getString("book_asset_liability"));
            }
            return v2Rate.compareTo(v1Rate);
        });
        if (values.size() > 10){
            values = values.subList(0, 8);
        }

        for (PageData value : values){
            PageData result = new PageData();
            result.put("orgName", value.getString("orgName"));
            result.put("fvalue", value.getString("book_asset_liability"));
            result.put("code", pd.getString("type"));
            results.add(result);
        }

        return results;

    }


    private List<String> detailed(PageData pd) throws Exception {
        boolean isMerge = false;
        List<PageData> list;
        String orgId = pd.getString("orgId");
        int year = pd.getInteger("year");
        if (pd.getString("orgId").contains("united")) {
            orgId = orgId.substring(0, pd.getString("orgId").length() - 6);
            pd.put("united", 1);
        }

        List<String> mergeOrgIds = graphicOrgRelationService.getMergeChildList(orgId);
        if (CollectionUtil.isNotEmpty(mergeOrgIds)){
            pd.put("orgIds", mergeOrgIds);
            list = indicatorsValueDao.graphicDetaileds(pd);

            List<PageData> units = mergeOrgIds.stream().map(mergeOrgId -> {
                PageData unit = new PageData();
                unit.put("id", mergeOrgId);
                return unit;
            }).collect(Collectors.toList());
            pd.put("units", units);
            isMerge = true;
        }else {
            pd.put("orgId", orgId);
            list = indicatorsValueDao.graphicDetailed(pd);
        }


        List<String> results = listToValues(pd, list);
        if (!isMerge && year > 2019){
            // 2020年开始 通商特殊处理
            List<String> subtractOrgIds = graphicOrgRelationService.getSubtract(orgId, year);
            if(CollectionUtil.isNotEmpty(subtractOrgIds)){
                pd.put("orgIds", subtractOrgIds);
                List<PageData> subtractLists = indicatorsValueDao.graphicDetaileds(pd);
                List<PageData> units = subtractOrgIds.stream().map(subtractOrgId -> {
                    PageData unit = new PageData();
                    unit.put("id", subtractOrgId);
                    return unit;
                }).collect(Collectors.toList());
                pd.put("units", units);

                List<String> subtractValues = listToValues(pd, subtractLists);
                List<String> tempList = new ArrayList<>();
                for (int i = 0; i < results.size(); i++){
                    tempList.add(BigDecimalUtil.toPlanString(BigDecimalUtil.subtract(BigDecimalUtil.toBigdecimal(results.get(i)),
                            BigDecimalUtil.toBigdecimal(subtractValues.get(i)))));
                }

                results.clear();
                results.addAll(tempList);
            }

            List<String> addOrgIds = graphicOrgRelationService.getAdd(orgId, year);
            if(CollectionUtil.isNotEmpty(addOrgIds)){
                pd.put("orgIds", addOrgIds);
                List<PageData> addLists = indicatorsValueDao.graphicDetaileds(pd);
                List<PageData> units = addOrgIds.stream().map(subtractOrgId -> {
                    PageData unit = new PageData();
                    unit.put("id", subtractOrgId);
                    return unit;
                }).collect(Collectors.toList());
                pd.put("units", units);

                List<String> addValues = listToValues(pd, addLists);
                List<String> tempList = new ArrayList<>();
                for (int i = 0; i < results.size(); i++){
                    tempList.add(BigDecimalUtil.toPlanString(BigDecimalUtil.add(BigDecimalUtil.toBigdecimal(results.get(i)),
                            BigDecimalUtil.toBigdecimal(addValues.get(i)))));
                }

                results.clear();
                results.addAll(tempList);
            }
        }

        //亿元单位处理
        if ("2".equals(pd.getString("unitType"))){
            List<String> tempList = new ArrayList<>();
            for (int i = 0; i < results.size(); i++){
                tempList.add(BigDecimalUtil.toPlanString(BigDecimalUtil.divide(BigDecimalUtil.toBigdecimal(results.get(i)),
                        new BigDecimal(10000), 2, BigDecimal.ROUND_HALF_UP)));
            }
            results.clear();
            results.addAll(tempList);
        }
        return results;
    }

    private List<String> listToValues(PageData pd, List<PageData> list) throws Exception{
        List<String> l = new ArrayList<>();
        pd.put("tableTypeCode", "0");
        //获取已填的月份
        List<Integer> filledMonth = newBulletinService.findFillMonths((List<String>)pd.get("units"),
                pd.getString("orgId"), pd.getString("year"), "0");
        for (int i = 1; i <= 12; i++) {
            String v = "0";
            boolean isFilled = false;
            for (PageData pageData : list) {
                String m = String.valueOf(i);
                if (i < 10) {
                    m = "0" + i;
                }
                for (int months : filledMonth) {
                    if (i == months) {
                        isFilled = true;
                        break;
                    }
                }
                if (!isFilled) {
                    v = "";//为空值
                    break;
                }
                if (m.equals(pageData.getString("fmonth"))) {
                    String fvalue = pageData.getString("fvalue");
                    if (Tools.notEmpty(fvalue)) {
                        BigDecimal b = new BigDecimal(fvalue);
                        b.setScale(6, RoundingMode.UP);
                        v = b.toPlainString();
                        break;
                    }
                }
            }
            l.add(v);
        }
        return l;
    }

    /**
     * 获取净资产收益率 分析表数据
     * @param pd
     * @return
     */
    public ListResult<ReturnEquityDetailVO> getUnitReturnEquity(PageData pd){
        ListResult listResult;
        try {
            String reportTime = pd.getString("reportTime");
            String year = reportTime.substring(0, 4);
            String month = reportTime.substring(5, 7);
            pd.put("year", year);
            pd.put("month", month);
            String[] codeList2 = {"K58","K36"};
            pd.put("codeList", codeList2);
            PageData org = orgzationDao.findbyid(pd.getString("orgId"));
            boolean isGzw = false;
            if ("0".equals(org.getString("parentId"))) {
                pd.put("isGZ", "1");
                isGzw = true;
            }
            List<String> subtractIds = new ArrayList<>();
            List<String> addIds = new ArrayList<>();
            PageData addResult = new PageData();
            if (isGzw){
                subtractIds = graphicOrgRelationService.getSubtractChildList(reportTime);
                addIds = graphicOrgRelationService.getAddChildList(reportTime);
                if (CollectionUtil.isNotEmpty(addIds)){
                    pd.put("addIds", addIds);
                    addResult = indicatorsValueDao.getAddGroupCodesVal(pd);
                }

            }
            List<PageData> unitCodesVals = indicatorsValueDao.getUnitCodesVals(pd);
            listResult=new ListResult(CommonCode.SUCCESS);

            if (CollectionUtil.isEmpty(unitCodesVals)){
                return listResult;
            }
            pd.put("month", 12);
            pd.put("year",Integer.parseInt(year)-1);
            PageData lastAddResult = new PageData();
            if (isGzw){
                if (CollectionUtil.isNotEmpty(addIds)){
                    pd.put("addIds", addIds);
                    lastAddResult = indicatorsValueDao.getAddGroupCodesVal(pd);
                }
            }
            List<PageData> lastUnitCodesVals = indicatorsValueDao.getUnitCodesVals(pd);
            Map<String, PageData> lastMap = lastUnitCodesVals.stream().collect(Collectors
                    .toMap(a -> a.getString("orgId"), a -> a, (k1, k2) -> k1));
            List<ReturnEquityDetailVO> results = new ArrayList<>();
            BigDecimal totalK58 = new BigDecimal(0);
            BigDecimal totalK36 = new BigDecimal(0);
            BigDecimal totalLastK36 = new BigDecimal(0);


            for(PageData unitCodesVal : unitCodesVals){
                String orgId = unitCodesVal.getString("orgId");
                BigDecimal K58 = new BigDecimal(unitCodesVal.getString("K58"));
                BigDecimal K36 = new BigDecimal(unitCodesVal.getString("K36"));
                BigDecimal lastK36 = new BigDecimal(0);
                if (lastMap.containsKey(orgId)){
                    lastK36 = new BigDecimal(lastMap.get(orgId).getString("K36"));
                }
                BigDecimal JZCSYL = new BigDecimal("0");
                if (K58.compareTo(new BigDecimal("0")) != 0) {
                    K36 = K36.add(lastK36);
                    JZCSYL = K58.divide(new BigDecimal(month),6, RoundingMode.HALF_UP).multiply(new BigDecimal(12))
                            .divide(K36,6, RoundingMode.HALF_UP)
                            .multiply(new BigDecimal(2)).multiply(new BigDecimal("100"))
                            .divide(new BigDecimal(1), 2, RoundingMode.HALF_UP);
                }
                if (CollectionUtil.isEmpty(subtractIds) || !subtractIds.contains(orgId)){
                    totalK58 = BigDecimalUtil.add(totalK58, K58);
                    totalK36 = BigDecimalUtil.add(totalK36, K36);
                    totalLastK36 = BigDecimalUtil.add(totalLastK36, lastK36);
                }
                results.add(ReturnEquityDetailVO.builder().orgId(orgId).orgName(unitCodesVal.getString("orgName"))
                        .lastTotalNetAssets(lastK36).totalNetAssets(K36).accumulatedNetAssets(K58)
                        .returnEquity(JZCSYL).build());
            }
            if (CollectionUtil.isNotEmpty(addResult)){
                totalK58 = BigDecimalUtil.add(totalK58, new BigDecimal(addResult.getString("K58")));
                totalK36 = BigDecimalUtil.add(totalK36, new BigDecimal(addResult.getString("K36")));
            }
            if (CollectionUtil.isNotEmpty(lastAddResult)){
                totalLastK36 = BigDecimalUtil.add(totalLastK36, new BigDecimal(lastAddResult.getString("K36")));
            }
            BigDecimal totalJZCSYL = totalK58.divide(new BigDecimal(month),6, RoundingMode.HALF_UP).multiply(new BigDecimal(12))
                    .divide(totalK36,6, RoundingMode.HALF_UP)
                    .multiply(new BigDecimal(2))
                    .multiply(new BigDecimal("100"))
                    .divide(new BigDecimal(1), 2, RoundingMode.HALF_UP);

            results.add(ReturnEquityDetailVO.builder().orgName("合计")
                    .lastTotalNetAssets(totalLastK36).totalNetAssets(totalK36).accumulatedNetAssets(totalK58)
                    .returnEquity(totalJZCSYL).build());
            listResult.setList(results);
            return listResult;

        }catch (Exception e){
            LOGGER.error(ExceptionUtils.getStackTrace(e));
            throw new MyRuntimeException();
        }

    }

    /*-------------------------------以上为分析预警报表的查询方法------------------------------------------------*/


    /**
     * 获取父级下的子集
     */
    private List<PageData> getOrgIds(List<PageData> orgAll, String pid) {
        List<PageData> l = new ArrayList<>();
        for (PageData pageData : orgAll) {
            if (pid.equals(pageData.getString("id"))) {
                l.add(pageData);
            }
        }
        TreeUtli treeUtli = new TreeUtli();
        List<PageData> list_tree = treeUtli.getChlidList(pid, orgAll, l);
        return list_tree;
    }

    public static String formatDigit(String sign) {
        switch (sign) {
            case "00":
                sign = "一";
                break;
            case "01":
                sign = "一";
                break;
            case "02":
                sign = "二";
                break;
            case "03":
                sign = "三";
                break;
            case "04":
                sign = "四";
                break;
            case "05":
                sign = "五";
                break;
            case "06":
                sign = "六";
                break;
            case "07":
                sign = "七";
                break;
            case "08":
                sign = "八";
                break;
            case "09":
                sign = "九";
                break;
            case "10":
                sign = "十";
                break;
            case "11":
                sign = "十一";
                break;
            case "12":
                sign = "十二";
                break;
            default:
                break;
        }
        return sign;
    }
}
